
// this is autogenerated file, do not edit it.
#include "ficus/ficus.h"

struct _fx_N14K_form__ktyp_t_data_t;

static void _fx_free_N14K_form__ktyp_t(struct _fx_N14K_form__ktyp_t_data_t** dst);

struct _fx_N14C_form__ctyp_t_data_t;

static void _fx_free_N14C_form__ctyp_t(struct _fx_N14C_form__ctyp_t_data_t** dst);

struct _fx_N14C_form__cexp_t_data_t;

static void _fx_free_N14C_form__cexp_t(struct _fx_N14C_form__cexp_t_data_t** dst);

struct _fx_N15C_form__cstmt_t_data_t;

static void _fx_free_N15C_form__cstmt_t(struct _fx_N15C_form__cstmt_t_data_t** dst);

typedef struct _fx_LS_data_t {
   int_ rc;
   struct _fx_LS_data_t* tl;
   fx_str_t hd;
} _fx_LS_data_t, *_fx_LS;

typedef struct _fx_N17Options__optval_t {
   int tag;
   union {
      bool OptBool;
      int_ OptInt;
      fx_str_t OptString;
   } u;
} _fx_N17Options__optval_t;

typedef struct _fx_T2SN17Options__optval_t {
   fx_str_t t0;
   struct _fx_N17Options__optval_t t1;
} _fx_T2SN17Options__optval_t;

typedef struct _fx_LT2SN17Options__optval_t_data_t {
   int_ rc;
   struct _fx_LT2SN17Options__optval_t_data_t* tl;
   struct _fx_T2SN17Options__optval_t hd;
} _fx_LT2SN17Options__optval_t_data_t, *_fx_LT2SN17Options__optval_t;

typedef struct _fx_R18Options__options_t {
   struct _fx_LS_data_t* app_args;
   fx_str_t app_filename;
   bool arch64;
   bool force_rebuild;
   fx_str_t build_dir;
   fx_str_t build_rootdir;
   fx_str_t cflags;
   fx_str_t clibs;
   bool compile_by_cpp;
   fx_str_t filename;
   bool gen_c;
   struct _fx_LS_data_t* include_path;
   bool debug;
   struct _fx_LT2SN17Options__optval_t_data_t* defines;
   int_ optim_iters;
   int_ inline_thresh;
   bool enable_openmp;
   bool relax;
   bool use_preamble;
   bool make_app;
   int_ optimize_level;
   fx_str_t output_name;
   bool print_ast0;
   bool print_ast;
   bool print_k0;
   bool print_k;
   bool print_tokens;
   bool run_app;
   bool verbose;
   bool W_unused;
} _fx_R18Options__options_t;

typedef struct _fx_Ta2i {
   int_ t0;
   int_ t1;
} _fx_Ta2i;

typedef struct _fx_T2Ta2iS {
   struct _fx_Ta2i t0;
   fx_str_t t1;
} _fx_T2Ta2iS;

typedef struct _fx_R9Ast__id_t {
   int_ m;
   int_ i;
   int_ j;
} _fx_R9Ast__id_t;

typedef struct _fx_R10Ast__loc_t {
   int_ m_idx;
   int_ line0;
   int_ col0;
   int_ line1;
   int_ col1;
} _fx_R10Ast__loc_t;

typedef struct _fx_T2R9Ast__id_ti {
   struct _fx_R9Ast__id_t t0;
   int_ t1;
} _fx_T2R9Ast__id_ti;

typedef struct _fx_T2Bi {
   bool t0;
   int_ t1;
} _fx_T2Bi;

typedef struct _fx_N12Ast__scope_t {
   int tag;
   union {
      int_ ScBlock;
      struct _fx_T2Bi ScLoop;
      int_ ScFold;
      int_ ScArrMap;
      int_ ScMap;
      int_ ScTry;
      struct _fx_R9Ast__id_t ScFun;
      struct _fx_R9Ast__id_t ScClass;
      struct _fx_R9Ast__id_t ScInterface;
      int_ ScModule;
   } u;
} _fx_N12Ast__scope_t;

typedef struct _fx_LN12Ast__scope_t_data_t {
   int_ rc;
   struct _fx_LN12Ast__scope_t_data_t* tl;
   struct _fx_N12Ast__scope_t hd;
} _fx_LN12Ast__scope_t_data_t, *_fx_LN12Ast__scope_t;

typedef struct _fx_R16Ast__val_flags_t {
   bool val_flag_arg;
   bool val_flag_mutable;
   bool val_flag_temp;
   bool val_flag_tempref;
   bool val_flag_private;
   bool val_flag_subarray;
   bool val_flag_instance;
   struct _fx_T2R9Ast__id_ti val_flag_method;
   int_ val_flag_ctor;
   struct _fx_LN12Ast__scope_t_data_t* val_flag_global;
} _fx_R16Ast__val_flags_t;

typedef struct _fx_R17C_form__cdefval_t {
   struct _fx_R9Ast__id_t cv_name;
   struct _fx_N14C_form__ctyp_t_data_t* cv_typ;
   fx_str_t cv_cname;
   struct _fx_R16Ast__val_flags_t cv_flags;
   struct _fx_R10Ast__loc_t cv_loc;
} _fx_R17C_form__cdefval_t;

typedef struct _fx_R19C_form__cdeflabel_t {
   struct _fx_R9Ast__id_t cl_name;
   fx_str_t cl_cname;
   struct _fx_R10Ast__loc_t cl_loc;
} _fx_R19C_form__cdeflabel_t;

typedef struct _fx_T2R9Ast__id_tN14C_form__ctyp_t {
   struct _fx_R9Ast__id_t t0;
   struct _fx_N14C_form__ctyp_t_data_t* t1;
} _fx_T2R9Ast__id_tN14C_form__ctyp_t;

typedef struct _fx_LT2R9Ast__id_tN14C_form__ctyp_t_data_t {
   int_ rc;
   struct _fx_LT2R9Ast__id_tN14C_form__ctyp_t_data_t* tl;
   struct _fx_T2R9Ast__id_tN14C_form__ctyp_t hd;
} _fx_LT2R9Ast__id_tN14C_form__ctyp_t_data_t, *_fx_LT2R9Ast__id_tN14C_form__ctyp_t;

typedef struct _fx_R23C_form__cdefinterface_t {
   struct _fx_R9Ast__id_t ci_name;
   fx_str_t ci_cname;
   struct _fx_R9Ast__id_t ci_id;
   struct _fx_R9Ast__id_t ci_vtbl;
   struct _fx_R9Ast__id_t ci_base;
   struct _fx_LT2R9Ast__id_tN14C_form__ctyp_t_data_t* ci_all_methods;
   struct _fx_LN12Ast__scope_t_data_t* ci_scope;
   struct _fx_R10Ast__loc_t ci_loc;
} _fx_R23C_form__cdefinterface_t;

typedef struct _fx_rR23C_form__cdefinterface_t_data_t {
   int_ rc;
   struct _fx_R23C_form__cdefinterface_t data;
} _fx_rR23C_form__cdefinterface_t_data_t, *_fx_rR23C_form__cdefinterface_t;

typedef struct _fx_N17Ast__fun_constr_t {
   int tag;
   union {
      int_ CtorVariant;
      struct _fx_R9Ast__id_t CtorFP;
      struct _fx_R9Ast__id_t CtorExn;
   } u;
} _fx_N17Ast__fun_constr_t;

typedef struct _fx_R16Ast__fun_flags_t {
   int_ fun_flag_pure;
   bool fun_flag_ccode;
   bool fun_flag_have_keywords;
   bool fun_flag_inline;
   bool fun_flag_nothrow;
   bool fun_flag_really_nothrow;
   bool fun_flag_private;
   struct _fx_N17Ast__fun_constr_t fun_flag_ctor;
   struct _fx_R9Ast__id_t fun_flag_method_of;
   bool fun_flag_uses_fv;
   bool fun_flag_recursive;
   bool fun_flag_instance;
} _fx_R16Ast__fun_flags_t;

typedef struct _fx_LN15C_form__cstmt_t_data_t {
   int_ rc;
   struct _fx_LN15C_form__cstmt_t_data_t* tl;
   struct _fx_N15C_form__cstmt_t_data_t* hd;
} _fx_LN15C_form__cstmt_t_data_t, *_fx_LN15C_form__cstmt_t;

typedef struct _fx_N19C_form__carg_attr_t {
   int tag;
} _fx_N19C_form__carg_attr_t;

typedef struct _fx_LN19C_form__carg_attr_t_data_t {
   int_ rc;
   struct _fx_LN19C_form__carg_attr_t_data_t* tl;
   struct _fx_N19C_form__carg_attr_t hd;
} _fx_LN19C_form__carg_attr_t_data_t, *_fx_LN19C_form__carg_attr_t;

typedef struct _fx_T3R9Ast__id_tN14C_form__ctyp_tLN19C_form__carg_attr_t {
   struct _fx_R9Ast__id_t t0;
   struct _fx_N14C_form__ctyp_t_data_t* t1;
   struct _fx_LN19C_form__carg_attr_t_data_t* t2;
} _fx_T3R9Ast__id_tN14C_form__ctyp_tLN19C_form__carg_attr_t;

typedef struct _fx_LT3R9Ast__id_tN14C_form__ctyp_tLN19C_form__carg_attr_t_data_t {
   int_ rc;
   struct _fx_LT3R9Ast__id_tN14C_form__ctyp_tLN19C_form__carg_attr_t_data_t* tl;
   struct _fx_T3R9Ast__id_tN14C_form__ctyp_tLN19C_form__carg_attr_t hd;
} _fx_LT3R9Ast__id_tN14C_form__ctyp_tLN19C_form__carg_attr_t_data_t, *_fx_LT3R9Ast__id_tN14C_form__ctyp_tLN19C_form__carg_attr_t;

typedef struct _fx_R17C_form__cdeffun_t {
   struct _fx_R9Ast__id_t cf_name;
   fx_str_t cf_cname;
   struct _fx_LT3R9Ast__id_tN14C_form__ctyp_tLN19C_form__carg_attr_t_data_t* cf_args;
   struct _fx_N14C_form__ctyp_t_data_t* cf_rt;
   struct _fx_LN15C_form__cstmt_t_data_t* cf_body;
   struct _fx_R16Ast__fun_flags_t cf_flags;
   struct _fx_LN12Ast__scope_t_data_t* cf_scope;
   struct _fx_R10Ast__loc_t cf_loc;
} _fx_R17C_form__cdeffun_t;

typedef struct _fx_rR17C_form__cdeffun_t_data_t {
   int_ rc;
   struct _fx_R17C_form__cdeffun_t data;
} _fx_rR17C_form__cdeffun_t_data_t, *_fx_rR17C_form__cdeffun_t;

typedef struct _fx_Ta2R9Ast__id_t {
   struct _fx_R9Ast__id_t t0;
   struct _fx_R9Ast__id_t t1;
} _fx_Ta2R9Ast__id_t;

typedef struct _fx_LR9Ast__id_t_data_t {
   int_ rc;
   struct _fx_LR9Ast__id_t_data_t* tl;
   struct _fx_R9Ast__id_t hd;
} _fx_LR9Ast__id_t_data_t, *_fx_LR9Ast__id_t;

typedef struct _fx_R17C_form__ctprops_t {
   bool ctp_scalar;
   bool ctp_complex;
   bool ctp_ptr;
   bool ctp_pass_by_ref;
   struct _fx_LR9Ast__id_t_data_t* ctp_make;
   struct _fx_Ta2R9Ast__id_t ctp_free;
   struct _fx_Ta2R9Ast__id_t ctp_copy;
} _fx_R17C_form__ctprops_t;

typedef struct _fx_R17C_form__cdeftyp_t {
   struct _fx_R9Ast__id_t ct_name;
   struct _fx_N14C_form__ctyp_t_data_t* ct_typ;
   fx_str_t ct_cname;
   struct _fx_R17C_form__ctprops_t ct_props;
   int_ ct_data_start;
   struct _fx_R9Ast__id_t ct_enum;
   struct _fx_LR9Ast__id_t_data_t* ct_ifaces;
   struct _fx_R9Ast__id_t ct_ifaces_id;
   struct _fx_LN12Ast__scope_t_data_t* ct_scope;
   struct _fx_R10Ast__loc_t ct_loc;
} _fx_R17C_form__cdeftyp_t;

typedef struct _fx_rR17C_form__cdeftyp_t_data_t {
   int_ rc;
   struct _fx_R17C_form__cdeftyp_t data;
} _fx_rR17C_form__cdeftyp_t_data_t, *_fx_rR17C_form__cdeftyp_t;

typedef struct _fx_Nt6option1N14C_form__cexp_t {
   int tag;
   union {
      struct _fx_N14C_form__cexp_t_data_t* Some;
   } u;
} _fx_Nt6option1N14C_form__cexp_t;

typedef struct _fx_T2R9Ast__id_tNt6option1N14C_form__cexp_t {
   struct _fx_R9Ast__id_t t0;
   struct _fx_Nt6option1N14C_form__cexp_t t1;
} _fx_T2R9Ast__id_tNt6option1N14C_form__cexp_t;

typedef struct _fx_LT2R9Ast__id_tNt6option1N14C_form__cexp_t_data_t {
   int_ rc;
   struct _fx_LT2R9Ast__id_tNt6option1N14C_form__cexp_t_data_t* tl;
   struct _fx_T2R9Ast__id_tNt6option1N14C_form__cexp_t hd;
} _fx_LT2R9Ast__id_tNt6option1N14C_form__cexp_t_data_t, *_fx_LT2R9Ast__id_tNt6option1N14C_form__cexp_t;

typedef struct _fx_R18C_form__cdefenum_t {
   struct _fx_R9Ast__id_t cenum_name;
   struct _fx_LT2R9Ast__id_tNt6option1N14C_form__cexp_t_data_t* cenum_members;
   fx_str_t cenum_cname;
   struct _fx_LN12Ast__scope_t_data_t* cenum_scope;
   struct _fx_R10Ast__loc_t cenum_loc;
} _fx_R18C_form__cdefenum_t;

typedef struct _fx_rR18C_form__cdefenum_t_data_t {
   int_ rc;
   struct _fx_R18C_form__cdefenum_t data;
} _fx_rR18C_form__cdefenum_t_data_t, *_fx_rR18C_form__cdefenum_t;

typedef struct _fx_R19C_form__cdefmacro_t {
   struct _fx_R9Ast__id_t cm_name;
   fx_str_t cm_cname;
   struct _fx_LR9Ast__id_t_data_t* cm_args;
   struct _fx_LN15C_form__cstmt_t_data_t* cm_body;
   struct _fx_LN12Ast__scope_t_data_t* cm_scope;
   struct _fx_R10Ast__loc_t cm_loc;
} _fx_R19C_form__cdefmacro_t;

typedef struct _fx_rR19C_form__cdefmacro_t_data_t {
   int_ rc;
   struct _fx_R19C_form__cdefmacro_t data;
} _fx_rR19C_form__cdefmacro_t_data_t, *_fx_rR19C_form__cdefmacro_t;

typedef struct _fx_R17C_form__cdefexn_t {
   struct _fx_R9Ast__id_t cexn_name;
   fx_str_t cexn_cname;
   fx_str_t cexn_base_cname;
   struct _fx_N14C_form__ctyp_t_data_t* cexn_typ;
   bool cexn_std;
   struct _fx_R9Ast__id_t cexn_tag;
   struct _fx_R9Ast__id_t cexn_data;
   struct _fx_R9Ast__id_t cexn_info;
   struct _fx_R9Ast__id_t cexn_make;
   struct _fx_LN12Ast__scope_t_data_t* cexn_scope;
   struct _fx_R10Ast__loc_t cexn_loc;
} _fx_R17C_form__cdefexn_t;

typedef struct _fx_rR17C_form__cdefexn_t_data_t {
   int_ rc;
   struct _fx_R17C_form__cdefexn_t data;
} _fx_rR17C_form__cdefexn_t_data_t, *_fx_rR17C_form__cdefexn_t;

typedef struct _fx_N15C_form__cinfo_t {
   int tag;
   union {
      struct _fx_R17C_form__cdefval_t CVal;
      struct _fx_rR17C_form__cdeffun_t_data_t* CFun;
      struct _fx_rR17C_form__cdeftyp_t_data_t* CTyp;
      struct _fx_rR17C_form__cdefexn_t_data_t* CExn;
      struct _fx_rR23C_form__cdefinterface_t_data_t* CInterface;
      struct _fx_rR18C_form__cdefenum_t_data_t* CEnum;
      struct _fx_R19C_form__cdeflabel_t CLabel;
      struct _fx_rR19C_form__cdefmacro_t_data_t* CMacro;
   } u;
} _fx_N15C_form__cinfo_t;

typedef struct _fx_T2R9Ast__id_tN14K_form__ktyp_t {
   struct _fx_R9Ast__id_t t0;
   struct _fx_N14K_form__ktyp_t_data_t* t1;
} _fx_T2R9Ast__id_tN14K_form__ktyp_t;

typedef struct _fx_LT2R9Ast__id_tN14K_form__ktyp_t_data_t {
   int_ rc;
   struct _fx_LT2R9Ast__id_tN14K_form__ktyp_t_data_t* tl;
   struct _fx_T2R9Ast__id_tN14K_form__ktyp_t hd;
} _fx_LT2R9Ast__id_tN14K_form__ktyp_t_data_t, *_fx_LT2R9Ast__id_tN14K_form__ktyp_t;

typedef struct _fx_LN14K_form__ktyp_t_data_t {
   int_ rc;
   struct _fx_LN14K_form__ktyp_t_data_t* tl;
   struct _fx_N14K_form__ktyp_t_data_t* hd;
} _fx_LN14K_form__ktyp_t_data_t, *_fx_LN14K_form__ktyp_t;

typedef struct _fx_T2R10Ast__loc_tS {
   struct _fx_R10Ast__loc_t t0;
   fx_str_t t1;
} _fx_T2R10Ast__loc_tS;

typedef struct _fx_N13PP__ppstyle_t {
   int tag;
} _fx_N13PP__ppstyle_t;

typedef struct _fx_T3iiC {
   int_ t0;
   int_ t1;
   char_ t2;
} _fx_T3iiC;

typedef struct _fx_T2iN13PP__ppstyle_t {
   int_ t0;
   struct _fx_N13PP__ppstyle_t t1;
} _fx_T2iN13PP__ppstyle_t;

typedef struct _fx_N11PP__pptok_t {
   int tag;
   union {
      fx_str_t PPString;
      struct _fx_T3iiC PPBreak;
      struct _fx_T2iN13PP__ppstyle_t PPBegin;
   } u;
} _fx_N11PP__pptok_t;

typedef struct _fx_T2N11PP__pptok_ti {
   struct _fx_N11PP__pptok_t t0;
   int_ t1;
} _fx_T2N11PP__pptok_ti;

typedef struct _fx_R11PP__state_t {
   int_ space;
   int_ left;
   int_ right;
   int_ top;
   int_ bottom;
   int_ lefttotal;
   int_ righttotal;
   fx_arr_t q;
   fx_arr_t stack;
   fx_arr_t pp_stack;
   int_ pp_top;
   bool emptystack;
} _fx_R11PP__state_t;

typedef struct _fx_FPv1S {
   int (*fp)(fx_str_t*, void*);
   fx_fcv_t* fcv;
} _fx_FPv1S;

typedef struct _fx_FPLS0 {
   int (*fp)(struct _fx_LS_data_t**, void*);
   fx_fcv_t* fcv;
} _fx_FPLS0;

typedef struct _fx_rR11PP__state_t_data_t {
   int_ rc;
   struct _fx_R11PP__state_t data;
} _fx_rR11PP__state_t_data_t, *_fx_rR11PP__state_t;

typedef struct _fx_R5PP__t {
   int_ margin;
   int_ default_indent;
   struct _fx_FPv1S print_f;
   struct _fx_FPLS0 get_f;
   struct _fx_rR11PP__state_t_data_t* r;
} _fx_R5PP__t;

typedef struct _fx_T2il {
   int_ t0;
   int64_t t1;
} _fx_T2il;

typedef struct _fx_T2iq {
   int_ t0;
   uint64_t t1;
} _fx_T2iq;

typedef struct _fx_T2id {
   int_ t0;
   double t1;
} _fx_T2id;

typedef struct _fx_N14K_form__klit_t {
   int tag;
   union {
      int64_t KLitInt;
      struct _fx_T2il KLitSInt;
      struct _fx_T2iq KLitUInt;
      struct _fx_T2id KLitFloat;
      fx_str_t KLitString;
      char_ KLitChar;
      bool KLitBool;
      struct _fx_N14K_form__ktyp_t_data_t* KLitNil;
   } u;
} _fx_N14K_form__klit_t;

typedef struct _fx_T2LN14K_form__ktyp_tN14K_form__ktyp_t {
   struct _fx_LN14K_form__ktyp_t_data_t* t0;
   struct _fx_N14K_form__ktyp_t_data_t* t1;
} _fx_T2LN14K_form__ktyp_tN14K_form__ktyp_t;

typedef struct _fx_T2R9Ast__id_tLT2R9Ast__id_tN14K_form__ktyp_t {
   struct _fx_R9Ast__id_t t0;
   struct _fx_LT2R9Ast__id_tN14K_form__ktyp_t_data_t* t1;
} _fx_T2R9Ast__id_tLT2R9Ast__id_tN14K_form__ktyp_t;

typedef struct _fx_T2iN14K_form__ktyp_t {
   int_ t0;
   struct _fx_N14K_form__ktyp_t_data_t* t1;
} _fx_T2iN14K_form__ktyp_t;

typedef struct _fx_N14K_form__ktyp_t_data_t {
   int_ rc;
   int tag;
   union {
      int_ KTypSInt;
      int_ KTypUInt;
      int_ KTypFloat;
      struct _fx_N14K_form__ktyp_t_data_t* KTypRawPointer;
      struct _fx_T2LN14K_form__ktyp_tN14K_form__ktyp_t KTypFun;
      struct _fx_LN14K_form__ktyp_t_data_t* KTypTuple;
      struct _fx_T2R9Ast__id_tLT2R9Ast__id_tN14K_form__ktyp_t KTypRecord;
      struct _fx_R9Ast__id_t KTypName;
      struct _fx_T2iN14K_form__ktyp_t KTypArray;
      struct _fx_N14K_form__ktyp_t_data_t* KTypVector;
      struct _fx_N14K_form__ktyp_t_data_t* KTypList;
      struct _fx_N14K_form__ktyp_t_data_t* KTypRef;
   } u;
} _fx_N14K_form__ktyp_t_data_t, *_fx_N14K_form__ktyp_t;

typedef struct _fx_Nt6option1N14C_form__ctyp_t {
   int tag;
   union {
      struct _fx_N14C_form__ctyp_t_data_t* Some;
   } u;
} _fx_Nt6option1N14C_form__ctyp_t;

typedef struct _fx_Nt6option1R9Ast__id_t {
   int tag;
   union {
      struct _fx_R9Ast__id_t Some;
   } u;
} _fx_Nt6option1R9Ast__id_t;

typedef struct _fx_N12Ast__cmpop_t {
   int tag;
} _fx_N12Ast__cmpop_t;

typedef struct _fx_T2R9Ast__id_tR10Ast__loc_t {
   struct _fx_R9Ast__id_t t0;
   struct _fx_R10Ast__loc_t t1;
} _fx_T2R9Ast__id_tR10Ast__loc_t;

typedef struct _fx_T2SR10Ast__loc_t {
   fx_str_t t0;
   struct _fx_R10Ast__loc_t t1;
} _fx_T2SR10Ast__loc_t;

typedef struct _fx_N17C_form__cbinary_t {
   int tag;
   union {
      struct _fx_N12Ast__cmpop_t COpCmp;
   } u;
} _fx_N17C_form__cbinary_t;

typedef struct _fx_N16C_form__cunary_t {
   int tag;
} _fx_N16C_form__cunary_t;

typedef struct _fx_N19C_form__ctyp_attr_t {
   int tag;
} _fx_N19C_form__ctyp_attr_t;

typedef struct _fx_T2Nt6option1R9Ast__id_tLT2R9Ast__id_tN14C_form__ctyp_t {
   struct _fx_Nt6option1R9Ast__id_t t0;
   struct _fx_LT2R9Ast__id_tN14C_form__ctyp_t_data_t* t1;
} _fx_T2Nt6option1R9Ast__id_tLT2R9Ast__id_tN14C_form__ctyp_t;

typedef struct _fx_LN14C_form__ctyp_t_data_t {
   int_ rc;
   struct _fx_LN14C_form__ctyp_t_data_t* tl;
   struct _fx_N14C_form__ctyp_t_data_t* hd;
} _fx_LN14C_form__ctyp_t_data_t, *_fx_LN14C_form__ctyp_t;

typedef struct _fx_T2LN14C_form__ctyp_tN14C_form__ctyp_t {
   struct _fx_LN14C_form__ctyp_t_data_t* t0;
   struct _fx_N14C_form__ctyp_t_data_t* t1;
} _fx_T2LN14C_form__ctyp_tN14C_form__ctyp_t;

typedef struct _fx_LN19C_form__ctyp_attr_t_data_t {
   int_ rc;
   struct _fx_LN19C_form__ctyp_attr_t_data_t* tl;
   struct _fx_N19C_form__ctyp_attr_t hd;
} _fx_LN19C_form__ctyp_attr_t_data_t, *_fx_LN19C_form__ctyp_attr_t;

typedef struct _fx_T2LN19C_form__ctyp_attr_tN14C_form__ctyp_t {
   struct _fx_LN19C_form__ctyp_attr_t_data_t* t0;
   struct _fx_N14C_form__ctyp_t_data_t* t1;
} _fx_T2LN19C_form__ctyp_attr_tN14C_form__ctyp_t;

typedef struct _fx_T2iN14C_form__ctyp_t {
   int_ t0;
   struct _fx_N14C_form__ctyp_t_data_t* t1;
} _fx_T2iN14C_form__ctyp_t;

typedef struct _fx_N14C_form__ctyp_t_data_t {
   int_ rc;
   int tag;
   union {
      int_ CTypSInt;
      int_ CTypUInt;
      int_ CTypFloat;
      struct _fx_T2Nt6option1R9Ast__id_tLT2R9Ast__id_tN14C_form__ctyp_t CTypStruct;
      struct _fx_T2Nt6option1R9Ast__id_tLT2R9Ast__id_tN14C_form__ctyp_t CTypUnion;
      struct _fx_T2LN14C_form__ctyp_tN14C_form__ctyp_t CTypFunRawPtr;
      struct _fx_T2LN19C_form__ctyp_attr_tN14C_form__ctyp_t CTypRawPtr;
      struct _fx_T2LN19C_form__ctyp_attr_tN14C_form__ctyp_t CTypRawArray;
      struct _fx_T2iN14C_form__ctyp_t CTypArray;
      struct _fx_N14C_form__ctyp_t_data_t* CTypVector;
      struct _fx_R9Ast__id_t CTypName;
   } u;
} _fx_N14C_form__ctyp_t_data_t, *_fx_N14C_form__ctyp_t;

typedef struct _fx_T2N14C_form__ctyp_tR10Ast__loc_t {
   struct _fx_N14C_form__ctyp_t_data_t* t0;
   struct _fx_R10Ast__loc_t t1;
} _fx_T2N14C_form__ctyp_tR10Ast__loc_t;

typedef struct _fx_T2R9Ast__id_tT2N14C_form__ctyp_tR10Ast__loc_t {
   struct _fx_R9Ast__id_t t0;
   struct _fx_T2N14C_form__ctyp_tR10Ast__loc_t t1;
} _fx_T2R9Ast__id_tT2N14C_form__ctyp_tR10Ast__loc_t;

typedef struct _fx_T2N14K_form__klit_tT2N14C_form__ctyp_tR10Ast__loc_t {
   struct _fx_N14K_form__klit_t t0;
   struct _fx_T2N14C_form__ctyp_tR10Ast__loc_t t1;
} _fx_T2N14K_form__klit_tT2N14C_form__ctyp_tR10Ast__loc_t;

typedef struct _fx_T4N17C_form__cbinary_tN14C_form__cexp_tN14C_form__cexp_tT2N14C_form__ctyp_tR10Ast__loc_t {
   struct _fx_N17C_form__cbinary_t t0;
   struct _fx_N14C_form__cexp_t_data_t* t1;
   struct _fx_N14C_form__cexp_t_data_t* t2;
   struct _fx_T2N14C_form__ctyp_tR10Ast__loc_t t3;
} _fx_T4N17C_form__cbinary_tN14C_form__cexp_tN14C_form__cexp_tT2N14C_form__ctyp_tR10Ast__loc_t;

typedef struct _fx_T3N16C_form__cunary_tN14C_form__cexp_tT2N14C_form__ctyp_tR10Ast__loc_t {
   struct _fx_N16C_form__cunary_t t0;
   struct _fx_N14C_form__cexp_t_data_t* t1;
   struct _fx_T2N14C_form__ctyp_tR10Ast__loc_t t2;
} _fx_T3N16C_form__cunary_tN14C_form__cexp_tT2N14C_form__ctyp_tR10Ast__loc_t;

typedef struct _fx_T3N14C_form__cexp_tR9Ast__id_tT2N14C_form__ctyp_tR10Ast__loc_t {
   struct _fx_N14C_form__cexp_t_data_t* t0;
   struct _fx_R9Ast__id_t t1;
   struct _fx_T2N14C_form__ctyp_tR10Ast__loc_t t2;
} _fx_T3N14C_form__cexp_tR9Ast__id_tT2N14C_form__ctyp_tR10Ast__loc_t;

typedef struct _fx_T3N14C_form__cexp_tN14C_form__ctyp_tR10Ast__loc_t {
   struct _fx_N14C_form__cexp_t_data_t* t0;
   struct _fx_N14C_form__ctyp_t_data_t* t1;
   struct _fx_R10Ast__loc_t t2;
} _fx_T3N14C_form__cexp_tN14C_form__ctyp_tR10Ast__loc_t;

typedef struct _fx_T4N14C_form__cexp_tN14C_form__cexp_tN14C_form__cexp_tT2N14C_form__ctyp_tR10Ast__loc_t {
   struct _fx_N14C_form__cexp_t_data_t* t0;
   struct _fx_N14C_form__cexp_t_data_t* t1;
   struct _fx_N14C_form__cexp_t_data_t* t2;
   struct _fx_T2N14C_form__ctyp_tR10Ast__loc_t t3;
} _fx_T4N14C_form__cexp_tN14C_form__cexp_tN14C_form__cexp_tT2N14C_form__ctyp_tR10Ast__loc_t;

typedef struct _fx_LN14C_form__cexp_t_data_t {
   int_ rc;
   struct _fx_LN14C_form__cexp_t_data_t* tl;
   struct _fx_N14C_form__cexp_t_data_t* hd;
} _fx_LN14C_form__cexp_t_data_t, *_fx_LN14C_form__cexp_t;

typedef struct _fx_T3N14C_form__cexp_tLN14C_form__cexp_tT2N14C_form__ctyp_tR10Ast__loc_t {
   struct _fx_N14C_form__cexp_t_data_t* t0;
   struct _fx_LN14C_form__cexp_t_data_t* t1;
   struct _fx_T2N14C_form__ctyp_tR10Ast__loc_t t2;
} _fx_T3N14C_form__cexp_tLN14C_form__cexp_tT2N14C_form__ctyp_tR10Ast__loc_t;

typedef struct _fx_T2LN14C_form__cexp_tT2N14C_form__ctyp_tR10Ast__loc_t {
   struct _fx_LN14C_form__cexp_t_data_t* t0;
   struct _fx_T2N14C_form__ctyp_tR10Ast__loc_t t1;
} _fx_T2LN14C_form__cexp_tT2N14C_form__ctyp_tR10Ast__loc_t;

typedef struct _fx_N14C_form__cexp_t_data_t {
   int_ rc;
   int tag;
   union {
      struct _fx_T2R9Ast__id_tT2N14C_form__ctyp_tR10Ast__loc_t CExpIdent;
      struct _fx_T2N14K_form__klit_tT2N14C_form__ctyp_tR10Ast__loc_t CExpLit;
      struct _fx_T4N17C_form__cbinary_tN14C_form__cexp_tN14C_form__cexp_tT2N14C_form__ctyp_tR10Ast__loc_t CExpBinary;
      struct _fx_T3N16C_form__cunary_tN14C_form__cexp_tT2N14C_form__ctyp_tR10Ast__loc_t CExpUnary;
      struct _fx_T3N14C_form__cexp_tR9Ast__id_tT2N14C_form__ctyp_tR10Ast__loc_t CExpMem;
      struct _fx_T3N14C_form__cexp_tR9Ast__id_tT2N14C_form__ctyp_tR10Ast__loc_t CExpArrow;
      struct _fx_T3N14C_form__cexp_tN14C_form__ctyp_tR10Ast__loc_t CExpCast;
      struct _fx_T4N14C_form__cexp_tN14C_form__cexp_tN14C_form__cexp_tT2N14C_form__ctyp_tR10Ast__loc_t CExpTernary;
      struct _fx_T3N14C_form__cexp_tLN14C_form__cexp_tT2N14C_form__ctyp_tR10Ast__loc_t CExpCall;
      struct _fx_T2LN14C_form__cexp_tT2N14C_form__ctyp_tR10Ast__loc_t CExpInit;
      struct _fx_T2N14C_form__ctyp_tR10Ast__loc_t CExpTyp;
      struct _fx_T2SR10Ast__loc_t CExpCCode;
   } u;
} _fx_N14C_form__cexp_t_data_t, *_fx_N14C_form__cexp_t;

typedef struct _fx_T2Nt6option1N14C_form__cexp_tR10Ast__loc_t {
   struct _fx_Nt6option1N14C_form__cexp_t t0;
   struct _fx_R10Ast__loc_t t1;
} _fx_T2Nt6option1N14C_form__cexp_tR10Ast__loc_t;

typedef struct _fx_T2LN15C_form__cstmt_tR10Ast__loc_t {
   struct _fx_LN15C_form__cstmt_t_data_t* t0;
   struct _fx_R10Ast__loc_t t1;
} _fx_T2LN15C_form__cstmt_tR10Ast__loc_t;

typedef struct _fx_T2R9Ast__id_tN15C_form__cstmt_t {
   struct _fx_R9Ast__id_t t0;
   struct _fx_N15C_form__cstmt_t_data_t* t1;
} _fx_T2R9Ast__id_tN15C_form__cstmt_t;

typedef struct _fx_T4N14C_form__cexp_tN15C_form__cstmt_tN15C_form__cstmt_tR10Ast__loc_t {
   struct _fx_N14C_form__cexp_t_data_t* t0;
   struct _fx_N15C_form__cstmt_t_data_t* t1;
   struct _fx_N15C_form__cstmt_t_data_t* t2;
   struct _fx_R10Ast__loc_t t3;
} _fx_T4N14C_form__cexp_tN15C_form__cstmt_tN15C_form__cstmt_tR10Ast__loc_t;

typedef struct _fx_T6Nt6option1N14C_form__ctyp_tLN14C_form__cexp_tNt6option1N14C_form__cexp_tLN14C_form__cexp_tN15C_form__cstmt_tR10Ast__loc_t {
   struct _fx_Nt6option1N14C_form__ctyp_t t0;
   struct _fx_LN14C_form__cexp_t_data_t* t1;
   struct _fx_Nt6option1N14C_form__cexp_t t2;
   struct _fx_LN14C_form__cexp_t_data_t* t3;
   struct _fx_N15C_form__cstmt_t_data_t* t4;
   struct _fx_R10Ast__loc_t t5;
} _fx_T6Nt6option1N14C_form__ctyp_tLN14C_form__cexp_tNt6option1N14C_form__cexp_tLN14C_form__cexp_tN15C_form__cstmt_tR10Ast__loc_t;

typedef struct _fx_T3N14C_form__cexp_tN15C_form__cstmt_tR10Ast__loc_t {
   struct _fx_N14C_form__cexp_t_data_t* t0;
   struct _fx_N15C_form__cstmt_t_data_t* t1;
   struct _fx_R10Ast__loc_t t2;
} _fx_T3N14C_form__cexp_tN15C_form__cstmt_tR10Ast__loc_t;

typedef struct _fx_T3N15C_form__cstmt_tN14C_form__cexp_tR10Ast__loc_t {
   struct _fx_N15C_form__cstmt_t_data_t* t0;
   struct _fx_N14C_form__cexp_t_data_t* t1;
   struct _fx_R10Ast__loc_t t2;
} _fx_T3N15C_form__cstmt_tN14C_form__cexp_tR10Ast__loc_t;

typedef struct _fx_T2LN14C_form__cexp_tLN15C_form__cstmt_t {
   struct _fx_LN14C_form__cexp_t_data_t* t0;
   struct _fx_LN15C_form__cstmt_t_data_t* t1;
} _fx_T2LN14C_form__cexp_tLN15C_form__cstmt_t;

typedef struct _fx_LT2LN14C_form__cexp_tLN15C_form__cstmt_t_data_t {
   int_ rc;
   struct _fx_LT2LN14C_form__cexp_tLN15C_form__cstmt_t_data_t* tl;
   struct _fx_T2LN14C_form__cexp_tLN15C_form__cstmt_t hd;
} _fx_LT2LN14C_form__cexp_tLN15C_form__cstmt_t_data_t, *_fx_LT2LN14C_form__cexp_tLN15C_form__cstmt_t;

typedef struct _fx_T3N14C_form__cexp_tLT2LN14C_form__cexp_tLN15C_form__cstmt_tR10Ast__loc_t {
   struct _fx_N14C_form__cexp_t_data_t* t0;
   struct _fx_LT2LN14C_form__cexp_tLN15C_form__cstmt_t_data_t* t1;
   struct _fx_R10Ast__loc_t t2;
} _fx_T3N14C_form__cexp_tLT2LN14C_form__cexp_tLN15C_form__cstmt_tR10Ast__loc_t;

typedef struct _fx_T4N14C_form__ctyp_tR9Ast__id_tNt6option1N14C_form__cexp_tR10Ast__loc_t {
   struct _fx_N14C_form__ctyp_t_data_t* t0;
   struct _fx_R9Ast__id_t t1;
   struct _fx_Nt6option1N14C_form__cexp_t t2;
   struct _fx_R10Ast__loc_t t3;
} _fx_T4N14C_form__ctyp_tR9Ast__id_tNt6option1N14C_form__cexp_tR10Ast__loc_t;

typedef struct _fx_T2N14C_form__cexp_tLN15C_form__cstmt_t {
   struct _fx_N14C_form__cexp_t_data_t* t0;
   struct _fx_LN15C_form__cstmt_t_data_t* t1;
} _fx_T2N14C_form__cexp_tLN15C_form__cstmt_t;

typedef struct _fx_LT2N14C_form__cexp_tLN15C_form__cstmt_t_data_t {
   int_ rc;
   struct _fx_LT2N14C_form__cexp_tLN15C_form__cstmt_t_data_t* tl;
   struct _fx_T2N14C_form__cexp_tLN15C_form__cstmt_t hd;
} _fx_LT2N14C_form__cexp_tLN15C_form__cstmt_t_data_t, *_fx_LT2N14C_form__cexp_tLN15C_form__cstmt_t;

typedef struct _fx_T3LT2N14C_form__cexp_tLN15C_form__cstmt_tLN15C_form__cstmt_tR10Ast__loc_t {
   struct _fx_LT2N14C_form__cexp_tLN15C_form__cstmt_t_data_t* t0;
   struct _fx_LN15C_form__cstmt_t_data_t* t1;
   struct _fx_R10Ast__loc_t t2;
} _fx_T3LT2N14C_form__cexp_tLN15C_form__cstmt_tLN15C_form__cstmt_tR10Ast__loc_t;

typedef struct _fx_N15C_form__cstmt_t_data_t {
   int_ rc;
   int tag;
   union {
      struct _fx_R10Ast__loc_t CStmtNop;
      struct _fx_T2SR10Ast__loc_t CComment;
      struct _fx_N14C_form__cexp_t_data_t* CExp;
      struct _fx_R10Ast__loc_t CStmtBreak;
      struct _fx_R10Ast__loc_t CStmtContinue;
      struct _fx_T2Nt6option1N14C_form__cexp_tR10Ast__loc_t CStmtReturn;
      struct _fx_T2LN15C_form__cstmt_tR10Ast__loc_t CStmtBlock;
      struct _fx_T2R9Ast__id_tN15C_form__cstmt_t CStmtSync;
      struct _fx_T4N14C_form__cexp_tN15C_form__cstmt_tN15C_form__cstmt_tR10Ast__loc_t CStmtIf;
      struct _fx_T2R9Ast__id_tR10Ast__loc_t CStmtGoto;
      struct _fx_T2R9Ast__id_tR10Ast__loc_t CStmtLabel;
      struct _fx_T6Nt6option1N14C_form__ctyp_tLN14C_form__cexp_tNt6option1N14C_form__cexp_tLN14C_form__cexp_tN15C_form__cstmt_tR10Ast__loc_t
         CStmtFor;
      struct _fx_T3N14C_form__cexp_tN15C_form__cstmt_tR10Ast__loc_t CStmtWhile;
      struct _fx_T3N15C_form__cstmt_tN14C_form__cexp_tR10Ast__loc_t CStmtDoWhile;
      struct _fx_T3N14C_form__cexp_tLT2LN14C_form__cexp_tLN15C_form__cstmt_tR10Ast__loc_t CStmtSwitch;
      struct _fx_T4N14C_form__ctyp_tR9Ast__id_tNt6option1N14C_form__cexp_tR10Ast__loc_t CDefVal;
      struct _fx_rR17C_form__cdeffun_t_data_t* CDefFun;
      struct _fx_rR17C_form__cdeftyp_t_data_t* CDefTyp;
      struct _fx_T2R9Ast__id_tR10Ast__loc_t CDefForwardSym;
      struct _fx_T2R9Ast__id_tR10Ast__loc_t CDefForwardTyp;
      struct _fx_rR18C_form__cdefenum_t_data_t* CDefEnum;
      struct _fx_rR23C_form__cdefinterface_t_data_t* CDefInterface;
      struct _fx_rR19C_form__cdefmacro_t_data_t* CMacroDef;
      struct _fx_T2R9Ast__id_tR10Ast__loc_t CMacroUndef;
      struct _fx_T3LT2N14C_form__cexp_tLN15C_form__cstmt_tLN15C_form__cstmt_tR10Ast__loc_t CMacroIf;
      struct _fx_T2SR10Ast__loc_t CMacroInclude;
      struct _fx_T2SR10Ast__loc_t CMacroPragma;
   } u;
} _fx_N15C_form__cstmt_t_data_t, *_fx_N15C_form__cstmt_t;

typedef struct _fx_N13C_pp__assoc_t {
   int tag;
} _fx_N13C_pp__assoc_t;

typedef struct _fx_T3SiN13C_pp__assoc_t {
   fx_str_t t0;
   int_ t1;
   struct _fx_N13C_pp__assoc_t t2;
} _fx_T3SiN13C_pp__assoc_t;

typedef struct {
   int_ rc;
   int_ data;
} _fx_E4Exit_data_t;

typedef struct {
   int_ rc;
   fx_str_t data;
} _fx_E4Fail_data_t;

typedef struct {
   int_ rc;
   struct _fx_T2Ta2iS data;
} _fx_E22LexerUtils__LexerError_data_t;

typedef struct {
   int_ rc;
   struct _fx_T2R10Ast__loc_tS data;
} _fx_E17Ast__CompileError_data_t;

typedef struct {
   int_ rc;
   struct _fx_T2R10Ast__loc_tS data;
} _fx_E18Parser__ParseError_data_t;

static void _fx_free_LS(struct _fx_LS_data_t** dst)
{
   FX_FREE_LIST_IMPL(_fx_LS, fx_free_str);
}

static int _fx_cons_LS(fx_str_t* hd, struct _fx_LS_data_t* tl, bool addref_tl, struct _fx_LS_data_t** fx_result)
{
   FX_MAKE_LIST_IMPL(_fx_LS, fx_copy_str);
}

static void _fx_free_N17Options__optval_t(struct _fx_N17Options__optval_t* dst)
{
   switch (dst->tag) {
   case 3:
      fx_free_str(&dst->u.OptString); break;
   default:
      ;
   }
   dst->tag = 0;
}

static void _fx_copy_N17Options__optval_t(struct _fx_N17Options__optval_t* src, struct _fx_N17Options__optval_t* dst)
{
   dst->tag = src->tag;
   switch (src->tag) {
   case 3:
      fx_copy_str(&src->u.OptString, &dst->u.OptString); break;
   default:
      dst->u = src->u;
   }
}

static void _fx_free_T2SN17Options__optval_t(struct _fx_T2SN17Options__optval_t* dst)
{
   fx_free_str(&dst->t0);
   _fx_free_N17Options__optval_t(&dst->t1);
}

static void _fx_copy_T2SN17Options__optval_t(struct _fx_T2SN17Options__optval_t* src, struct _fx_T2SN17Options__optval_t* dst)
{
   fx_copy_str(&src->t0, &dst->t0);
   _fx_copy_N17Options__optval_t(&src->t1, &dst->t1);
}

static void _fx_make_T2SN17Options__optval_t(
   fx_str_t* t0,
   struct _fx_N17Options__optval_t* t1,
   struct _fx_T2SN17Options__optval_t* fx_result)
{
   fx_copy_str(t0, &fx_result->t0);
   _fx_copy_N17Options__optval_t(t1, &fx_result->t1);
}

static void _fx_free_LT2SN17Options__optval_t(struct _fx_LT2SN17Options__optval_t_data_t** dst)
{
   FX_FREE_LIST_IMPL(_fx_LT2SN17Options__optval_t, _fx_free_T2SN17Options__optval_t);
}

static int _fx_cons_LT2SN17Options__optval_t(
   struct _fx_T2SN17Options__optval_t* hd,
   struct _fx_LT2SN17Options__optval_t_data_t* tl,
   bool addref_tl,
   struct _fx_LT2SN17Options__optval_t_data_t** fx_result)
{
   FX_MAKE_LIST_IMPL(_fx_LT2SN17Options__optval_t, _fx_copy_T2SN17Options__optval_t);
}

static void _fx_free_R18Options__options_t(struct _fx_R18Options__options_t* dst)
{
   _fx_free_LS(&dst->app_args);
   fx_free_str(&dst->app_filename);
   fx_free_str(&dst->build_dir);
   fx_free_str(&dst->build_rootdir);
   fx_free_str(&dst->cflags);
   fx_free_str(&dst->clibs);
   fx_free_str(&dst->filename);
   _fx_free_LS(&dst->include_path);
   _fx_free_LT2SN17Options__optval_t(&dst->defines);
   fx_free_str(&dst->output_name);
}

static void _fx_copy_R18Options__options_t(struct _fx_R18Options__options_t* src, struct _fx_R18Options__options_t* dst)
{
   FX_COPY_PTR(src->app_args, &dst->app_args);
   fx_copy_str(&src->app_filename, &dst->app_filename);
   dst->arch64 = src->arch64;
   dst->force_rebuild = src->force_rebuild;
   fx_copy_str(&src->build_dir, &dst->build_dir);
   fx_copy_str(&src->build_rootdir, &dst->build_rootdir);
   fx_copy_str(&src->cflags, &dst->cflags);
   fx_copy_str(&src->clibs, &dst->clibs);
   dst->compile_by_cpp = src->compile_by_cpp;
   fx_copy_str(&src->filename, &dst->filename);
   dst->gen_c = src->gen_c;
   FX_COPY_PTR(src->include_path, &dst->include_path);
   dst->debug = src->debug;
   FX_COPY_PTR(src->defines, &dst->defines);
   dst->optim_iters = src->optim_iters;
   dst->inline_thresh = src->inline_thresh;
   dst->enable_openmp = src->enable_openmp;
   dst->relax = src->relax;
   dst->use_preamble = src->use_preamble;
   dst->make_app = src->make_app;
   dst->optimize_level = src->optimize_level;
   fx_copy_str(&src->output_name, &dst->output_name);
   dst->print_ast0 = src->print_ast0;
   dst->print_ast = src->print_ast;
   dst->print_k0 = src->print_k0;
   dst->print_k = src->print_k;
   dst->print_tokens = src->print_tokens;
   dst->run_app = src->run_app;
   dst->verbose = src->verbose;
   dst->W_unused = src->W_unused;
}

static void _fx_make_R18Options__options_t(
   struct _fx_LS_data_t* r_app_args,
   fx_str_t* r_app_filename,
   bool r_arch64,
   bool r_force_rebuild,
   fx_str_t* r_build_dir,
   fx_str_t* r_build_rootdir,
   fx_str_t* r_cflags,
   fx_str_t* r_clibs,
   bool r_compile_by_cpp,
   fx_str_t* r_filename,
   bool r_gen_c,
   struct _fx_LS_data_t* r_include_path,
   bool r_debug,
   struct _fx_LT2SN17Options__optval_t_data_t* r_defines,
   int_ r_optim_iters,
   int_ r_inline_thresh,
   bool r_enable_openmp,
   bool r_relax,
   bool r_use_preamble,
   bool r_make_app,
   int_ r_optimize_level,
   fx_str_t* r_output_name,
   bool r_print_ast0,
   bool r_print_ast,
   bool r_print_k0,
   bool r_print_k,
   bool r_print_tokens,
   bool r_run_app,
   bool r_verbose,
   bool r_W_unused,
   struct _fx_R18Options__options_t* fx_result)
{
   FX_COPY_PTR(r_app_args, &fx_result->app_args);
   fx_copy_str(r_app_filename, &fx_result->app_filename);
   fx_result->arch64 = r_arch64;
   fx_result->force_rebuild = r_force_rebuild;
   fx_copy_str(r_build_dir, &fx_result->build_dir);
   fx_copy_str(r_build_rootdir, &fx_result->build_rootdir);
   fx_copy_str(r_cflags, &fx_result->cflags);
   fx_copy_str(r_clibs, &fx_result->clibs);
   fx_result->compile_by_cpp = r_compile_by_cpp;
   fx_copy_str(r_filename, &fx_result->filename);
   fx_result->gen_c = r_gen_c;
   FX_COPY_PTR(r_include_path, &fx_result->include_path);
   fx_result->debug = r_debug;
   FX_COPY_PTR(r_defines, &fx_result->defines);
   fx_result->optim_iters = r_optim_iters;
   fx_result->inline_thresh = r_inline_thresh;
   fx_result->enable_openmp = r_enable_openmp;
   fx_result->relax = r_relax;
   fx_result->use_preamble = r_use_preamble;
   fx_result->make_app = r_make_app;
   fx_result->optimize_level = r_optimize_level;
   fx_copy_str(r_output_name, &fx_result->output_name);
   fx_result->print_ast0 = r_print_ast0;
   fx_result->print_ast = r_print_ast;
   fx_result->print_k0 = r_print_k0;
   fx_result->print_k = r_print_k;
   fx_result->print_tokens = r_print_tokens;
   fx_result->run_app = r_run_app;
   fx_result->verbose = r_verbose;
   fx_result->W_unused = r_W_unused;
}

static void _fx_free_T2Ta2iS(struct _fx_T2Ta2iS* dst)
{
   fx_free_str(&dst->t1);
}

static void _fx_copy_T2Ta2iS(struct _fx_T2Ta2iS* src, struct _fx_T2Ta2iS* dst)
{
   dst->t0 = src->t0;
   fx_copy_str(&src->t1, &dst->t1);
}

static void _fx_make_T2Ta2iS(struct _fx_Ta2i* t0, fx_str_t* t1, struct _fx_T2Ta2iS* fx_result)
{
   fx_result->t0 = *t0;
   fx_copy_str(t1, &fx_result->t1);
}

static int _fx_cons_LN12Ast__scope_t(
   struct _fx_N12Ast__scope_t* hd,
   struct _fx_LN12Ast__scope_t_data_t* tl,
   bool addref_tl,
   struct _fx_LN12Ast__scope_t_data_t** fx_result)
{
   FX_MAKE_LIST_IMPL(_fx_LN12Ast__scope_t, FX_COPY_SIMPLE_BY_PTR);
}

static void _fx_free_R16Ast__val_flags_t(struct _fx_R16Ast__val_flags_t* dst)
{
   fx_free_list_simple(&dst->val_flag_global);
}

static void _fx_copy_R16Ast__val_flags_t(struct _fx_R16Ast__val_flags_t* src, struct _fx_R16Ast__val_flags_t* dst)
{
   dst->val_flag_arg = src->val_flag_arg;
   dst->val_flag_mutable = src->val_flag_mutable;
   dst->val_flag_temp = src->val_flag_temp;
   dst->val_flag_tempref = src->val_flag_tempref;
   dst->val_flag_private = src->val_flag_private;
   dst->val_flag_subarray = src->val_flag_subarray;
   dst->val_flag_instance = src->val_flag_instance;
   dst->val_flag_method = src->val_flag_method;
   dst->val_flag_ctor = src->val_flag_ctor;
   FX_COPY_PTR(src->val_flag_global, &dst->val_flag_global);
}

static void _fx_make_R16Ast__val_flags_t(
   bool r_val_flag_arg,
   bool r_val_flag_mutable,
   bool r_val_flag_temp,
   bool r_val_flag_tempref,
   bool r_val_flag_private,
   bool r_val_flag_subarray,
   bool r_val_flag_instance,
   struct _fx_T2R9Ast__id_ti* r_val_flag_method,
   int_ r_val_flag_ctor,
   struct _fx_LN12Ast__scope_t_data_t* r_val_flag_global,
   struct _fx_R16Ast__val_flags_t* fx_result)
{
   fx_result->val_flag_arg = r_val_flag_arg;
   fx_result->val_flag_mutable = r_val_flag_mutable;
   fx_result->val_flag_temp = r_val_flag_temp;
   fx_result->val_flag_tempref = r_val_flag_tempref;
   fx_result->val_flag_private = r_val_flag_private;
   fx_result->val_flag_subarray = r_val_flag_subarray;
   fx_result->val_flag_instance = r_val_flag_instance;
   fx_result->val_flag_method = *r_val_flag_method;
   fx_result->val_flag_ctor = r_val_flag_ctor;
   FX_COPY_PTR(r_val_flag_global, &fx_result->val_flag_global);
}

static void _fx_free_R17C_form__cdefval_t(struct _fx_R17C_form__cdefval_t* dst)
{
   _fx_free_N14C_form__ctyp_t(&dst->cv_typ);
   fx_free_str(&dst->cv_cname);
   _fx_free_R16Ast__val_flags_t(&dst->cv_flags);
}

static void _fx_copy_R17C_form__cdefval_t(struct _fx_R17C_form__cdefval_t* src, struct _fx_R17C_form__cdefval_t* dst)
{
   dst->cv_name = src->cv_name;
   FX_COPY_PTR(src->cv_typ, &dst->cv_typ);
   fx_copy_str(&src->cv_cname, &dst->cv_cname);
   _fx_copy_R16Ast__val_flags_t(&src->cv_flags, &dst->cv_flags);
   dst->cv_loc = src->cv_loc;
}

static void _fx_make_R17C_form__cdefval_t(
   struct _fx_R9Ast__id_t* r_cv_name,
   struct _fx_N14C_form__ctyp_t_data_t* r_cv_typ,
   fx_str_t* r_cv_cname,
   struct _fx_R16Ast__val_flags_t* r_cv_flags,
   struct _fx_R10Ast__loc_t* r_cv_loc,
   struct _fx_R17C_form__cdefval_t* fx_result)
{
   fx_result->cv_name = *r_cv_name;
   FX_COPY_PTR(r_cv_typ, &fx_result->cv_typ);
   fx_copy_str(r_cv_cname, &fx_result->cv_cname);
   _fx_copy_R16Ast__val_flags_t(r_cv_flags, &fx_result->cv_flags);
   fx_result->cv_loc = *r_cv_loc;
}

static void _fx_free_R19C_form__cdeflabel_t(struct _fx_R19C_form__cdeflabel_t* dst)
{
   fx_free_str(&dst->cl_cname);
}

static void _fx_copy_R19C_form__cdeflabel_t(struct _fx_R19C_form__cdeflabel_t* src, struct _fx_R19C_form__cdeflabel_t* dst)
{
   dst->cl_name = src->cl_name;
   fx_copy_str(&src->cl_cname, &dst->cl_cname);
   dst->cl_loc = src->cl_loc;
}

static void _fx_make_R19C_form__cdeflabel_t(
   struct _fx_R9Ast__id_t* r_cl_name,
   fx_str_t* r_cl_cname,
   struct _fx_R10Ast__loc_t* r_cl_loc,
   struct _fx_R19C_form__cdeflabel_t* fx_result)
{
   fx_result->cl_name = *r_cl_name;
   fx_copy_str(r_cl_cname, &fx_result->cl_cname);
   fx_result->cl_loc = *r_cl_loc;
}

static void _fx_free_T2R9Ast__id_tN14C_form__ctyp_t(struct _fx_T2R9Ast__id_tN14C_form__ctyp_t* dst)
{
   _fx_free_N14C_form__ctyp_t(&dst->t1);
}

static void _fx_copy_T2R9Ast__id_tN14C_form__ctyp_t(
   struct _fx_T2R9Ast__id_tN14C_form__ctyp_t* src,
   struct _fx_T2R9Ast__id_tN14C_form__ctyp_t* dst)
{
   dst->t0 = src->t0;
   FX_COPY_PTR(src->t1, &dst->t1);
}

static void _fx_make_T2R9Ast__id_tN14C_form__ctyp_t(
   struct _fx_R9Ast__id_t* t0,
   struct _fx_N14C_form__ctyp_t_data_t* t1,
   struct _fx_T2R9Ast__id_tN14C_form__ctyp_t* fx_result)
{
   fx_result->t0 = *t0;
   FX_COPY_PTR(t1, &fx_result->t1);
}

static void _fx_free_LT2R9Ast__id_tN14C_form__ctyp_t(struct _fx_LT2R9Ast__id_tN14C_form__ctyp_t_data_t** dst)
{
   FX_FREE_LIST_IMPL(_fx_LT2R9Ast__id_tN14C_form__ctyp_t, _fx_free_T2R9Ast__id_tN14C_form__ctyp_t);
}

static int _fx_cons_LT2R9Ast__id_tN14C_form__ctyp_t(
   struct _fx_T2R9Ast__id_tN14C_form__ctyp_t* hd,
   struct _fx_LT2R9Ast__id_tN14C_form__ctyp_t_data_t* tl,
   bool addref_tl,
   struct _fx_LT2R9Ast__id_tN14C_form__ctyp_t_data_t** fx_result)
{
   FX_MAKE_LIST_IMPL(_fx_LT2R9Ast__id_tN14C_form__ctyp_t, _fx_copy_T2R9Ast__id_tN14C_form__ctyp_t);
}

static void _fx_free_R23C_form__cdefinterface_t(struct _fx_R23C_form__cdefinterface_t* dst)
{
   fx_free_str(&dst->ci_cname);
   _fx_free_LT2R9Ast__id_tN14C_form__ctyp_t(&dst->ci_all_methods);
   fx_free_list_simple(&dst->ci_scope);
}

static void _fx_copy_R23C_form__cdefinterface_t(
   struct _fx_R23C_form__cdefinterface_t* src,
   struct _fx_R23C_form__cdefinterface_t* dst)
{
   dst->ci_name = src->ci_name;
   fx_copy_str(&src->ci_cname, &dst->ci_cname);
   dst->ci_id = src->ci_id;
   dst->ci_vtbl = src->ci_vtbl;
   dst->ci_base = src->ci_base;
   FX_COPY_PTR(src->ci_all_methods, &dst->ci_all_methods);
   FX_COPY_PTR(src->ci_scope, &dst->ci_scope);
   dst->ci_loc = src->ci_loc;
}

static void _fx_make_R23C_form__cdefinterface_t(
   struct _fx_R9Ast__id_t* r_ci_name,
   fx_str_t* r_ci_cname,
   struct _fx_R9Ast__id_t* r_ci_id,
   struct _fx_R9Ast__id_t* r_ci_vtbl,
   struct _fx_R9Ast__id_t* r_ci_base,
   struct _fx_LT2R9Ast__id_tN14C_form__ctyp_t_data_t* r_ci_all_methods,
   struct _fx_LN12Ast__scope_t_data_t* r_ci_scope,
   struct _fx_R10Ast__loc_t* r_ci_loc,
   struct _fx_R23C_form__cdefinterface_t* fx_result)
{
   fx_result->ci_name = *r_ci_name;
   fx_copy_str(r_ci_cname, &fx_result->ci_cname);
   fx_result->ci_id = *r_ci_id;
   fx_result->ci_vtbl = *r_ci_vtbl;
   fx_result->ci_base = *r_ci_base;
   FX_COPY_PTR(r_ci_all_methods, &fx_result->ci_all_methods);
   FX_COPY_PTR(r_ci_scope, &fx_result->ci_scope);
   fx_result->ci_loc = *r_ci_loc;
}

static void _fx_free_rR23C_form__cdefinterface_t(struct _fx_rR23C_form__cdefinterface_t_data_t** dst)
{
   FX_FREE_REF_IMPL(_fx_rR23C_form__cdefinterface_t, _fx_free_R23C_form__cdefinterface_t);
}

static int _fx_make_rR23C_form__cdefinterface_t(
   struct _fx_R23C_form__cdefinterface_t* arg,
   struct _fx_rR23C_form__cdefinterface_t_data_t** fx_result)
{
   FX_MAKE_REF_IMPL(_fx_rR23C_form__cdefinterface_t, _fx_copy_R23C_form__cdefinterface_t);
}

static void _fx_free_LN15C_form__cstmt_t(struct _fx_LN15C_form__cstmt_t_data_t** dst)
{
   FX_FREE_LIST_IMPL(_fx_LN15C_form__cstmt_t, _fx_free_N15C_form__cstmt_t);
}

static int _fx_cons_LN15C_form__cstmt_t(
   struct _fx_N15C_form__cstmt_t_data_t* hd,
   struct _fx_LN15C_form__cstmt_t_data_t* tl,
   bool addref_tl,
   struct _fx_LN15C_form__cstmt_t_data_t** fx_result)
{
   FX_MAKE_LIST_IMPL(_fx_LN15C_form__cstmt_t, FX_COPY_PTR);
}

static int _fx_cons_LN19C_form__carg_attr_t(
   struct _fx_N19C_form__carg_attr_t* hd,
   struct _fx_LN19C_form__carg_attr_t_data_t* tl,
   bool addref_tl,
   struct _fx_LN19C_form__carg_attr_t_data_t** fx_result)
{
   FX_MAKE_LIST_IMPL(_fx_LN19C_form__carg_attr_t, FX_COPY_SIMPLE_BY_PTR);
}

static void _fx_free_T3R9Ast__id_tN14C_form__ctyp_tLN19C_form__carg_attr_t(
   struct _fx_T3R9Ast__id_tN14C_form__ctyp_tLN19C_form__carg_attr_t* dst)
{
   _fx_free_N14C_form__ctyp_t(&dst->t1);
   fx_free_list_simple(&dst->t2);
}

static void _fx_copy_T3R9Ast__id_tN14C_form__ctyp_tLN19C_form__carg_attr_t(
   struct _fx_T3R9Ast__id_tN14C_form__ctyp_tLN19C_form__carg_attr_t* src,
   struct _fx_T3R9Ast__id_tN14C_form__ctyp_tLN19C_form__carg_attr_t* dst)
{
   dst->t0 = src->t0;
   FX_COPY_PTR(src->t1, &dst->t1);
   FX_COPY_PTR(src->t2, &dst->t2);
}

static void _fx_make_T3R9Ast__id_tN14C_form__ctyp_tLN19C_form__carg_attr_t(
   struct _fx_R9Ast__id_t* t0,
   struct _fx_N14C_form__ctyp_t_data_t* t1,
   struct _fx_LN19C_form__carg_attr_t_data_t* t2,
   struct _fx_T3R9Ast__id_tN14C_form__ctyp_tLN19C_form__carg_attr_t* fx_result)
{
   fx_result->t0 = *t0;
   FX_COPY_PTR(t1, &fx_result->t1);
   FX_COPY_PTR(t2, &fx_result->t2);
}

static void _fx_free_LT3R9Ast__id_tN14C_form__ctyp_tLN19C_form__carg_attr_t(
   struct _fx_LT3R9Ast__id_tN14C_form__ctyp_tLN19C_form__carg_attr_t_data_t** dst)
{
   FX_FREE_LIST_IMPL(_fx_LT3R9Ast__id_tN14C_form__ctyp_tLN19C_form__carg_attr_t,
      _fx_free_T3R9Ast__id_tN14C_form__ctyp_tLN19C_form__carg_attr_t);
}

static int _fx_cons_LT3R9Ast__id_tN14C_form__ctyp_tLN19C_form__carg_attr_t(
   struct _fx_T3R9Ast__id_tN14C_form__ctyp_tLN19C_form__carg_attr_t* hd,
   struct _fx_LT3R9Ast__id_tN14C_form__ctyp_tLN19C_form__carg_attr_t_data_t* tl,
   bool addref_tl,
   struct _fx_LT3R9Ast__id_tN14C_form__ctyp_tLN19C_form__carg_attr_t_data_t** fx_result)
{
   FX_MAKE_LIST_IMPL(_fx_LT3R9Ast__id_tN14C_form__ctyp_tLN19C_form__carg_attr_t,
      _fx_copy_T3R9Ast__id_tN14C_form__ctyp_tLN19C_form__carg_attr_t);
}

static void _fx_free_R17C_form__cdeffun_t(struct _fx_R17C_form__cdeffun_t* dst)
{
   fx_free_str(&dst->cf_cname);
   _fx_free_LT3R9Ast__id_tN14C_form__ctyp_tLN19C_form__carg_attr_t(&dst->cf_args);
   _fx_free_N14C_form__ctyp_t(&dst->cf_rt);
   _fx_free_LN15C_form__cstmt_t(&dst->cf_body);
   fx_free_list_simple(&dst->cf_scope);
}

static void _fx_copy_R17C_form__cdeffun_t(struct _fx_R17C_form__cdeffun_t* src, struct _fx_R17C_form__cdeffun_t* dst)
{
   dst->cf_name = src->cf_name;
   fx_copy_str(&src->cf_cname, &dst->cf_cname);
   FX_COPY_PTR(src->cf_args, &dst->cf_args);
   FX_COPY_PTR(src->cf_rt, &dst->cf_rt);
   FX_COPY_PTR(src->cf_body, &dst->cf_body);
   dst->cf_flags = src->cf_flags;
   FX_COPY_PTR(src->cf_scope, &dst->cf_scope);
   dst->cf_loc = src->cf_loc;
}

static void _fx_make_R17C_form__cdeffun_t(
   struct _fx_R9Ast__id_t* r_cf_name,
   fx_str_t* r_cf_cname,
   struct _fx_LT3R9Ast__id_tN14C_form__ctyp_tLN19C_form__carg_attr_t_data_t* r_cf_args,
   struct _fx_N14C_form__ctyp_t_data_t* r_cf_rt,
   struct _fx_LN15C_form__cstmt_t_data_t* r_cf_body,
   struct _fx_R16Ast__fun_flags_t* r_cf_flags,
   struct _fx_LN12Ast__scope_t_data_t* r_cf_scope,
   struct _fx_R10Ast__loc_t* r_cf_loc,
   struct _fx_R17C_form__cdeffun_t* fx_result)
{
   fx_result->cf_name = *r_cf_name;
   fx_copy_str(r_cf_cname, &fx_result->cf_cname);
   FX_COPY_PTR(r_cf_args, &fx_result->cf_args);
   FX_COPY_PTR(r_cf_rt, &fx_result->cf_rt);
   FX_COPY_PTR(r_cf_body, &fx_result->cf_body);
   fx_result->cf_flags = *r_cf_flags;
   FX_COPY_PTR(r_cf_scope, &fx_result->cf_scope);
   fx_result->cf_loc = *r_cf_loc;
}

static void _fx_free_rR17C_form__cdeffun_t(struct _fx_rR17C_form__cdeffun_t_data_t** dst)
{
   FX_FREE_REF_IMPL(_fx_rR17C_form__cdeffun_t, _fx_free_R17C_form__cdeffun_t);
}

static int _fx_make_rR17C_form__cdeffun_t(
   struct _fx_R17C_form__cdeffun_t* arg,
   struct _fx_rR17C_form__cdeffun_t_data_t** fx_result)
{
   FX_MAKE_REF_IMPL(_fx_rR17C_form__cdeffun_t, _fx_copy_R17C_form__cdeffun_t);
}

static int _fx_cons_LR9Ast__id_t(
   struct _fx_R9Ast__id_t* hd,
   struct _fx_LR9Ast__id_t_data_t* tl,
   bool addref_tl,
   struct _fx_LR9Ast__id_t_data_t** fx_result)
{
   FX_MAKE_LIST_IMPL(_fx_LR9Ast__id_t, FX_COPY_SIMPLE_BY_PTR);
}

static void _fx_free_R17C_form__ctprops_t(struct _fx_R17C_form__ctprops_t* dst)
{
   fx_free_list_simple(&dst->ctp_make);
}

static void _fx_copy_R17C_form__ctprops_t(struct _fx_R17C_form__ctprops_t* src, struct _fx_R17C_form__ctprops_t* dst)
{
   dst->ctp_scalar = src->ctp_scalar;
   dst->ctp_complex = src->ctp_complex;
   dst->ctp_ptr = src->ctp_ptr;
   dst->ctp_pass_by_ref = src->ctp_pass_by_ref;
   FX_COPY_PTR(src->ctp_make, &dst->ctp_make);
   dst->ctp_free = src->ctp_free;
   dst->ctp_copy = src->ctp_copy;
}

static void _fx_make_R17C_form__ctprops_t(
   bool r_ctp_scalar,
   bool r_ctp_complex,
   bool r_ctp_ptr,
   bool r_ctp_pass_by_ref,
   struct _fx_LR9Ast__id_t_data_t* r_ctp_make,
   struct _fx_Ta2R9Ast__id_t* r_ctp_free,
   struct _fx_Ta2R9Ast__id_t* r_ctp_copy,
   struct _fx_R17C_form__ctprops_t* fx_result)
{
   fx_result->ctp_scalar = r_ctp_scalar;
   fx_result->ctp_complex = r_ctp_complex;
   fx_result->ctp_ptr = r_ctp_ptr;
   fx_result->ctp_pass_by_ref = r_ctp_pass_by_ref;
   FX_COPY_PTR(r_ctp_make, &fx_result->ctp_make);
   fx_result->ctp_free = *r_ctp_free;
   fx_result->ctp_copy = *r_ctp_copy;
}

static void _fx_free_R17C_form__cdeftyp_t(struct _fx_R17C_form__cdeftyp_t* dst)
{
   _fx_free_N14C_form__ctyp_t(&dst->ct_typ);
   fx_free_str(&dst->ct_cname);
   _fx_free_R17C_form__ctprops_t(&dst->ct_props);
   fx_free_list_simple(&dst->ct_ifaces);
   fx_free_list_simple(&dst->ct_scope);
}

static void _fx_copy_R17C_form__cdeftyp_t(struct _fx_R17C_form__cdeftyp_t* src, struct _fx_R17C_form__cdeftyp_t* dst)
{
   dst->ct_name = src->ct_name;
   FX_COPY_PTR(src->ct_typ, &dst->ct_typ);
   fx_copy_str(&src->ct_cname, &dst->ct_cname);
   _fx_copy_R17C_form__ctprops_t(&src->ct_props, &dst->ct_props);
   dst->ct_data_start = src->ct_data_start;
   dst->ct_enum = src->ct_enum;
   FX_COPY_PTR(src->ct_ifaces, &dst->ct_ifaces);
   dst->ct_ifaces_id = src->ct_ifaces_id;
   FX_COPY_PTR(src->ct_scope, &dst->ct_scope);
   dst->ct_loc = src->ct_loc;
}

static void _fx_make_R17C_form__cdeftyp_t(
   struct _fx_R9Ast__id_t* r_ct_name,
   struct _fx_N14C_form__ctyp_t_data_t* r_ct_typ,
   fx_str_t* r_ct_cname,
   struct _fx_R17C_form__ctprops_t* r_ct_props,
   int_ r_ct_data_start,
   struct _fx_R9Ast__id_t* r_ct_enum,
   struct _fx_LR9Ast__id_t_data_t* r_ct_ifaces,
   struct _fx_R9Ast__id_t* r_ct_ifaces_id,
   struct _fx_LN12Ast__scope_t_data_t* r_ct_scope,
   struct _fx_R10Ast__loc_t* r_ct_loc,
   struct _fx_R17C_form__cdeftyp_t* fx_result)
{
   fx_result->ct_name = *r_ct_name;
   FX_COPY_PTR(r_ct_typ, &fx_result->ct_typ);
   fx_copy_str(r_ct_cname, &fx_result->ct_cname);
   _fx_copy_R17C_form__ctprops_t(r_ct_props, &fx_result->ct_props);
   fx_result->ct_data_start = r_ct_data_start;
   fx_result->ct_enum = *r_ct_enum;
   FX_COPY_PTR(r_ct_ifaces, &fx_result->ct_ifaces);
   fx_result->ct_ifaces_id = *r_ct_ifaces_id;
   FX_COPY_PTR(r_ct_scope, &fx_result->ct_scope);
   fx_result->ct_loc = *r_ct_loc;
}

static void _fx_free_rR17C_form__cdeftyp_t(struct _fx_rR17C_form__cdeftyp_t_data_t** dst)
{
   FX_FREE_REF_IMPL(_fx_rR17C_form__cdeftyp_t, _fx_free_R17C_form__cdeftyp_t);
}

static int _fx_make_rR17C_form__cdeftyp_t(
   struct _fx_R17C_form__cdeftyp_t* arg,
   struct _fx_rR17C_form__cdeftyp_t_data_t** fx_result)
{
   FX_MAKE_REF_IMPL(_fx_rR17C_form__cdeftyp_t, _fx_copy_R17C_form__cdeftyp_t);
}

static void _fx_free_Nt6option1N14C_form__cexp_t(struct _fx_Nt6option1N14C_form__cexp_t* dst)
{
   switch (dst->tag) {
   case 2:
      _fx_free_N14C_form__cexp_t(&dst->u.Some); break;
   default:
      ;
   }
   dst->tag = 0;
}

static void _fx_copy_Nt6option1N14C_form__cexp_t(
   struct _fx_Nt6option1N14C_form__cexp_t* src,
   struct _fx_Nt6option1N14C_form__cexp_t* dst)
{
   dst->tag = src->tag;
   switch (src->tag) {
   case 2:
      FX_COPY_PTR(src->u.Some, &dst->u.Some); break;
   default:
      dst->u = src->u;
   }
}

static void _fx_free_T2R9Ast__id_tNt6option1N14C_form__cexp_t(struct _fx_T2R9Ast__id_tNt6option1N14C_form__cexp_t* dst)
{
   _fx_free_Nt6option1N14C_form__cexp_t(&dst->t1);
}

static void _fx_copy_T2R9Ast__id_tNt6option1N14C_form__cexp_t(
   struct _fx_T2R9Ast__id_tNt6option1N14C_form__cexp_t* src,
   struct _fx_T2R9Ast__id_tNt6option1N14C_form__cexp_t* dst)
{
   dst->t0 = src->t0;
   _fx_copy_Nt6option1N14C_form__cexp_t(&src->t1, &dst->t1);
}

static void _fx_make_T2R9Ast__id_tNt6option1N14C_form__cexp_t(
   struct _fx_R9Ast__id_t* t0,
   struct _fx_Nt6option1N14C_form__cexp_t* t1,
   struct _fx_T2R9Ast__id_tNt6option1N14C_form__cexp_t* fx_result)
{
   fx_result->t0 = *t0;
   _fx_copy_Nt6option1N14C_form__cexp_t(t1, &fx_result->t1);
}

static void _fx_free_LT2R9Ast__id_tNt6option1N14C_form__cexp_t(
   struct _fx_LT2R9Ast__id_tNt6option1N14C_form__cexp_t_data_t** dst)
{
   FX_FREE_LIST_IMPL(_fx_LT2R9Ast__id_tNt6option1N14C_form__cexp_t, _fx_free_T2R9Ast__id_tNt6option1N14C_form__cexp_t);
}

static int _fx_cons_LT2R9Ast__id_tNt6option1N14C_form__cexp_t(
   struct _fx_T2R9Ast__id_tNt6option1N14C_form__cexp_t* hd,
   struct _fx_LT2R9Ast__id_tNt6option1N14C_form__cexp_t_data_t* tl,
   bool addref_tl,
   struct _fx_LT2R9Ast__id_tNt6option1N14C_form__cexp_t_data_t** fx_result)
{
   FX_MAKE_LIST_IMPL(_fx_LT2R9Ast__id_tNt6option1N14C_form__cexp_t, _fx_copy_T2R9Ast__id_tNt6option1N14C_form__cexp_t);
}

static void _fx_free_R18C_form__cdefenum_t(struct _fx_R18C_form__cdefenum_t* dst)
{
   _fx_free_LT2R9Ast__id_tNt6option1N14C_form__cexp_t(&dst->cenum_members);
   fx_free_str(&dst->cenum_cname);
   fx_free_list_simple(&dst->cenum_scope);
}

static void _fx_copy_R18C_form__cdefenum_t(struct _fx_R18C_form__cdefenum_t* src, struct _fx_R18C_form__cdefenum_t* dst)
{
   dst->cenum_name = src->cenum_name;
   FX_COPY_PTR(src->cenum_members, &dst->cenum_members);
   fx_copy_str(&src->cenum_cname, &dst->cenum_cname);
   FX_COPY_PTR(src->cenum_scope, &dst->cenum_scope);
   dst->cenum_loc = src->cenum_loc;
}

static void _fx_make_R18C_form__cdefenum_t(
   struct _fx_R9Ast__id_t* r_cenum_name,
   struct _fx_LT2R9Ast__id_tNt6option1N14C_form__cexp_t_data_t* r_cenum_members,
   fx_str_t* r_cenum_cname,
   struct _fx_LN12Ast__scope_t_data_t* r_cenum_scope,
   struct _fx_R10Ast__loc_t* r_cenum_loc,
   struct _fx_R18C_form__cdefenum_t* fx_result)
{
   fx_result->cenum_name = *r_cenum_name;
   FX_COPY_PTR(r_cenum_members, &fx_result->cenum_members);
   fx_copy_str(r_cenum_cname, &fx_result->cenum_cname);
   FX_COPY_PTR(r_cenum_scope, &fx_result->cenum_scope);
   fx_result->cenum_loc = *r_cenum_loc;
}

static void _fx_free_rR18C_form__cdefenum_t(struct _fx_rR18C_form__cdefenum_t_data_t** dst)
{
   FX_FREE_REF_IMPL(_fx_rR18C_form__cdefenum_t, _fx_free_R18C_form__cdefenum_t);
}

static int _fx_make_rR18C_form__cdefenum_t(
   struct _fx_R18C_form__cdefenum_t* arg,
   struct _fx_rR18C_form__cdefenum_t_data_t** fx_result)
{
   FX_MAKE_REF_IMPL(_fx_rR18C_form__cdefenum_t, _fx_copy_R18C_form__cdefenum_t);
}

static void _fx_free_R19C_form__cdefmacro_t(struct _fx_R19C_form__cdefmacro_t* dst)
{
   fx_free_str(&dst->cm_cname);
   fx_free_list_simple(&dst->cm_args);
   _fx_free_LN15C_form__cstmt_t(&dst->cm_body);
   fx_free_list_simple(&dst->cm_scope);
}

static void _fx_copy_R19C_form__cdefmacro_t(struct _fx_R19C_form__cdefmacro_t* src, struct _fx_R19C_form__cdefmacro_t* dst)
{
   dst->cm_name = src->cm_name;
   fx_copy_str(&src->cm_cname, &dst->cm_cname);
   FX_COPY_PTR(src->cm_args, &dst->cm_args);
   FX_COPY_PTR(src->cm_body, &dst->cm_body);
   FX_COPY_PTR(src->cm_scope, &dst->cm_scope);
   dst->cm_loc = src->cm_loc;
}

static void _fx_make_R19C_form__cdefmacro_t(
   struct _fx_R9Ast__id_t* r_cm_name,
   fx_str_t* r_cm_cname,
   struct _fx_LR9Ast__id_t_data_t* r_cm_args,
   struct _fx_LN15C_form__cstmt_t_data_t* r_cm_body,
   struct _fx_LN12Ast__scope_t_data_t* r_cm_scope,
   struct _fx_R10Ast__loc_t* r_cm_loc,
   struct _fx_R19C_form__cdefmacro_t* fx_result)
{
   fx_result->cm_name = *r_cm_name;
   fx_copy_str(r_cm_cname, &fx_result->cm_cname);
   FX_COPY_PTR(r_cm_args, &fx_result->cm_args);
   FX_COPY_PTR(r_cm_body, &fx_result->cm_body);
   FX_COPY_PTR(r_cm_scope, &fx_result->cm_scope);
   fx_result->cm_loc = *r_cm_loc;
}

static void _fx_free_rR19C_form__cdefmacro_t(struct _fx_rR19C_form__cdefmacro_t_data_t** dst)
{
   FX_FREE_REF_IMPL(_fx_rR19C_form__cdefmacro_t, _fx_free_R19C_form__cdefmacro_t);
}

static int _fx_make_rR19C_form__cdefmacro_t(
   struct _fx_R19C_form__cdefmacro_t* arg,
   struct _fx_rR19C_form__cdefmacro_t_data_t** fx_result)
{
   FX_MAKE_REF_IMPL(_fx_rR19C_form__cdefmacro_t, _fx_copy_R19C_form__cdefmacro_t);
}

static void _fx_free_R17C_form__cdefexn_t(struct _fx_R17C_form__cdefexn_t* dst)
{
   fx_free_str(&dst->cexn_cname);
   fx_free_str(&dst->cexn_base_cname);
   _fx_free_N14C_form__ctyp_t(&dst->cexn_typ);
   fx_free_list_simple(&dst->cexn_scope);
}

static void _fx_copy_R17C_form__cdefexn_t(struct _fx_R17C_form__cdefexn_t* src, struct _fx_R17C_form__cdefexn_t* dst)
{
   dst->cexn_name = src->cexn_name;
   fx_copy_str(&src->cexn_cname, &dst->cexn_cname);
   fx_copy_str(&src->cexn_base_cname, &dst->cexn_base_cname);
   FX_COPY_PTR(src->cexn_typ, &dst->cexn_typ);
   dst->cexn_std = src->cexn_std;
   dst->cexn_tag = src->cexn_tag;
   dst->cexn_data = src->cexn_data;
   dst->cexn_info = src->cexn_info;
   dst->cexn_make = src->cexn_make;
   FX_COPY_PTR(src->cexn_scope, &dst->cexn_scope);
   dst->cexn_loc = src->cexn_loc;
}

static void _fx_make_R17C_form__cdefexn_t(
   struct _fx_R9Ast__id_t* r_cexn_name,
   fx_str_t* r_cexn_cname,
   fx_str_t* r_cexn_base_cname,
   struct _fx_N14C_form__ctyp_t_data_t* r_cexn_typ,
   bool r_cexn_std,
   struct _fx_R9Ast__id_t* r_cexn_tag,
   struct _fx_R9Ast__id_t* r_cexn_data,
   struct _fx_R9Ast__id_t* r_cexn_info,
   struct _fx_R9Ast__id_t* r_cexn_make,
   struct _fx_LN12Ast__scope_t_data_t* r_cexn_scope,
   struct _fx_R10Ast__loc_t* r_cexn_loc,
   struct _fx_R17C_form__cdefexn_t* fx_result)
{
   fx_result->cexn_name = *r_cexn_name;
   fx_copy_str(r_cexn_cname, &fx_result->cexn_cname);
   fx_copy_str(r_cexn_base_cname, &fx_result->cexn_base_cname);
   FX_COPY_PTR(r_cexn_typ, &fx_result->cexn_typ);
   fx_result->cexn_std = r_cexn_std;
   fx_result->cexn_tag = *r_cexn_tag;
   fx_result->cexn_data = *r_cexn_data;
   fx_result->cexn_info = *r_cexn_info;
   fx_result->cexn_make = *r_cexn_make;
   FX_COPY_PTR(r_cexn_scope, &fx_result->cexn_scope);
   fx_result->cexn_loc = *r_cexn_loc;
}

static void _fx_free_rR17C_form__cdefexn_t(struct _fx_rR17C_form__cdefexn_t_data_t** dst)
{
   FX_FREE_REF_IMPL(_fx_rR17C_form__cdefexn_t, _fx_free_R17C_form__cdefexn_t);
}

static int _fx_make_rR17C_form__cdefexn_t(
   struct _fx_R17C_form__cdefexn_t* arg,
   struct _fx_rR17C_form__cdefexn_t_data_t** fx_result)
{
   FX_MAKE_REF_IMPL(_fx_rR17C_form__cdefexn_t, _fx_copy_R17C_form__cdefexn_t);
}

static void _fx_free_N15C_form__cinfo_t(struct _fx_N15C_form__cinfo_t* dst)
{
   switch (dst->tag) {
   case 2:
      _fx_free_R17C_form__cdefval_t(&dst->u.CVal); break;
   case 3:
      _fx_free_rR17C_form__cdeffun_t(&dst->u.CFun); break;
   case 4:
      _fx_free_rR17C_form__cdeftyp_t(&dst->u.CTyp); break;
   case 5:
      _fx_free_rR17C_form__cdefexn_t(&dst->u.CExn); break;
   case 6:
      _fx_free_rR23C_form__cdefinterface_t(&dst->u.CInterface); break;
   case 7:
      _fx_free_rR18C_form__cdefenum_t(&dst->u.CEnum); break;
   case 8:
      _fx_free_R19C_form__cdeflabel_t(&dst->u.CLabel); break;
   case 9:
      _fx_free_rR19C_form__cdefmacro_t(&dst->u.CMacro); break;
   default:
      ;
   }
   dst->tag = 0;
}

static void _fx_copy_N15C_form__cinfo_t(struct _fx_N15C_form__cinfo_t* src, struct _fx_N15C_form__cinfo_t* dst)
{
   dst->tag = src->tag;
   switch (src->tag) {
   case 2:
      _fx_copy_R17C_form__cdefval_t(&src->u.CVal, &dst->u.CVal); break;
   case 3:
      FX_COPY_PTR(src->u.CFun, &dst->u.CFun); break;
   case 4:
      FX_COPY_PTR(src->u.CTyp, &dst->u.CTyp); break;
   case 5:
      FX_COPY_PTR(src->u.CExn, &dst->u.CExn); break;
   case 6:
      FX_COPY_PTR(src->u.CInterface, &dst->u.CInterface); break;
   case 7:
      FX_COPY_PTR(src->u.CEnum, &dst->u.CEnum); break;
   case 8:
      _fx_copy_R19C_form__cdeflabel_t(&src->u.CLabel, &dst->u.CLabel); break;
   case 9:
      FX_COPY_PTR(src->u.CMacro, &dst->u.CMacro); break;
   default:
      dst->u = src->u;
   }
}

static void _fx_free_T2R9Ast__id_tN14K_form__ktyp_t(struct _fx_T2R9Ast__id_tN14K_form__ktyp_t* dst)
{
   _fx_free_N14K_form__ktyp_t(&dst->t1);
}

static void _fx_copy_T2R9Ast__id_tN14K_form__ktyp_t(
   struct _fx_T2R9Ast__id_tN14K_form__ktyp_t* src,
   struct _fx_T2R9Ast__id_tN14K_form__ktyp_t* dst)
{
   dst->t0 = src->t0;
   FX_COPY_PTR(src->t1, &dst->t1);
}

static void _fx_make_T2R9Ast__id_tN14K_form__ktyp_t(
   struct _fx_R9Ast__id_t* t0,
   struct _fx_N14K_form__ktyp_t_data_t* t1,
   struct _fx_T2R9Ast__id_tN14K_form__ktyp_t* fx_result)
{
   fx_result->t0 = *t0;
   FX_COPY_PTR(t1, &fx_result->t1);
}

static void _fx_free_LT2R9Ast__id_tN14K_form__ktyp_t(struct _fx_LT2R9Ast__id_tN14K_form__ktyp_t_data_t** dst)
{
   FX_FREE_LIST_IMPL(_fx_LT2R9Ast__id_tN14K_form__ktyp_t, _fx_free_T2R9Ast__id_tN14K_form__ktyp_t);
}

static int _fx_cons_LT2R9Ast__id_tN14K_form__ktyp_t(
   struct _fx_T2R9Ast__id_tN14K_form__ktyp_t* hd,
   struct _fx_LT2R9Ast__id_tN14K_form__ktyp_t_data_t* tl,
   bool addref_tl,
   struct _fx_LT2R9Ast__id_tN14K_form__ktyp_t_data_t** fx_result)
{
   FX_MAKE_LIST_IMPL(_fx_LT2R9Ast__id_tN14K_form__ktyp_t, _fx_copy_T2R9Ast__id_tN14K_form__ktyp_t);
}

static void _fx_free_LN14K_form__ktyp_t(struct _fx_LN14K_form__ktyp_t_data_t** dst)
{
   FX_FREE_LIST_IMPL(_fx_LN14K_form__ktyp_t, _fx_free_N14K_form__ktyp_t);
}

static int _fx_cons_LN14K_form__ktyp_t(
   struct _fx_N14K_form__ktyp_t_data_t* hd,
   struct _fx_LN14K_form__ktyp_t_data_t* tl,
   bool addref_tl,
   struct _fx_LN14K_form__ktyp_t_data_t** fx_result)
{
   FX_MAKE_LIST_IMPL(_fx_LN14K_form__ktyp_t, FX_COPY_PTR);
}

static void _fx_free_T2R10Ast__loc_tS(struct _fx_T2R10Ast__loc_tS* dst)
{
   fx_free_str(&dst->t1);
}

static void _fx_copy_T2R10Ast__loc_tS(struct _fx_T2R10Ast__loc_tS* src, struct _fx_T2R10Ast__loc_tS* dst)
{
   dst->t0 = src->t0;
   fx_copy_str(&src->t1, &dst->t1);
}

static void _fx_make_T2R10Ast__loc_tS(struct _fx_R10Ast__loc_t* t0, fx_str_t* t1, struct _fx_T2R10Ast__loc_tS* fx_result)
{
   fx_result->t0 = *t0;
   fx_copy_str(t1, &fx_result->t1);
}

static void _fx_free_N11PP__pptok_t(struct _fx_N11PP__pptok_t* dst)
{
   switch (dst->tag) {
   case 1:
      fx_free_str(&dst->u.PPString); break;
   default:
      ;
   }
   dst->tag = 0;
}

static void _fx_copy_N11PP__pptok_t(struct _fx_N11PP__pptok_t* src, struct _fx_N11PP__pptok_t* dst)
{
   dst->tag = src->tag;
   switch (src->tag) {
   case 1:
      fx_copy_str(&src->u.PPString, &dst->u.PPString); break;
   default:
      dst->u = src->u;
   }
}

static void _fx_free_T2N11PP__pptok_ti(struct _fx_T2N11PP__pptok_ti* dst)
{
   _fx_free_N11PP__pptok_t(&dst->t0);
}

static void _fx_copy_T2N11PP__pptok_ti(struct _fx_T2N11PP__pptok_ti* src, struct _fx_T2N11PP__pptok_ti* dst)
{
   _fx_copy_N11PP__pptok_t(&src->t0, &dst->t0);
   dst->t1 = src->t1;
}

static void _fx_make_T2N11PP__pptok_ti(struct _fx_N11PP__pptok_t* t0, int_ t1, struct _fx_T2N11PP__pptok_ti* fx_result)
{
   _fx_copy_N11PP__pptok_t(t0, &fx_result->t0);
   fx_result->t1 = t1;
}

static void _fx_free_R11PP__state_t(struct _fx_R11PP__state_t* dst)
{
   fx_free_arr(&dst->q);
   fx_free_arr(&dst->stack);
   fx_free_arr(&dst->pp_stack);
}

static void _fx_copy_R11PP__state_t(struct _fx_R11PP__state_t* src, struct _fx_R11PP__state_t* dst)
{
   dst->space = src->space;
   dst->left = src->left;
   dst->right = src->right;
   dst->top = src->top;
   dst->bottom = src->bottom;
   dst->lefttotal = src->lefttotal;
   dst->righttotal = src->righttotal;
   fx_copy_arr(&src->q, &dst->q);
   fx_copy_arr(&src->stack, &dst->stack);
   fx_copy_arr(&src->pp_stack, &dst->pp_stack);
   dst->pp_top = src->pp_top;
   dst->emptystack = src->emptystack;
}

static void _fx_make_R11PP__state_t(
   int_ r_space,
   int_ r_left,
   int_ r_right,
   int_ r_top,
   int_ r_bottom,
   int_ r_lefttotal,
   int_ r_righttotal,
   fx_arr_t* r_q,
   fx_arr_t* r_stack,
   fx_arr_t* r_pp_stack,
   int_ r_pp_top,
   bool r_emptystack,
   struct _fx_R11PP__state_t* fx_result)
{
   fx_result->space = r_space;
   fx_result->left = r_left;
   fx_result->right = r_right;
   fx_result->top = r_top;
   fx_result->bottom = r_bottom;
   fx_result->lefttotal = r_lefttotal;
   fx_result->righttotal = r_righttotal;
   fx_copy_arr(r_q, &fx_result->q);
   fx_copy_arr(r_stack, &fx_result->stack);
   fx_copy_arr(r_pp_stack, &fx_result->pp_stack);
   fx_result->pp_top = r_pp_top;
   fx_result->emptystack = r_emptystack;
}

static void _fx_free_rR11PP__state_t(struct _fx_rR11PP__state_t_data_t** dst)
{
   FX_FREE_REF_IMPL(_fx_rR11PP__state_t, _fx_free_R11PP__state_t);
}

static int _fx_make_rR11PP__state_t(struct _fx_R11PP__state_t* arg, struct _fx_rR11PP__state_t_data_t** fx_result)
{
   FX_MAKE_REF_IMPL(_fx_rR11PP__state_t, _fx_copy_R11PP__state_t);
}

static void _fx_free_R5PP__t(struct _fx_R5PP__t* dst)
{
   fx_free_fp(&dst->print_f);
   fx_free_fp(&dst->get_f);
   _fx_free_rR11PP__state_t(&dst->r);
}

static void _fx_copy_R5PP__t(struct _fx_R5PP__t* src, struct _fx_R5PP__t* dst)
{
   dst->margin = src->margin;
   dst->default_indent = src->default_indent;
   FX_COPY_FP(&src->print_f, &dst->print_f);
   FX_COPY_FP(&src->get_f, &dst->get_f);
   FX_COPY_PTR(src->r, &dst->r);
}

static void _fx_make_R5PP__t(
   int_ r_margin,
   int_ r_default_indent,
   struct _fx_FPv1S* r_print_f,
   struct _fx_FPLS0* r_get_f,
   struct _fx_rR11PP__state_t_data_t* r_r,
   struct _fx_R5PP__t* fx_result)
{
   fx_result->margin = r_margin;
   fx_result->default_indent = r_default_indent;
   FX_COPY_FP(r_print_f, &fx_result->print_f);
   FX_COPY_FP(r_get_f, &fx_result->get_f);
   FX_COPY_PTR(r_r, &fx_result->r);
}

static void _fx_free_N14K_form__klit_t(struct _fx_N14K_form__klit_t* dst)
{
   switch (dst->tag) {
   case 5:
      fx_free_str(&dst->u.KLitString); break;
   case 8:
      _fx_free_N14K_form__ktyp_t(&dst->u.KLitNil); break;
   default:
      ;
   }
   dst->tag = 0;
}

static void _fx_copy_N14K_form__klit_t(struct _fx_N14K_form__klit_t* src, struct _fx_N14K_form__klit_t* dst)
{
   dst->tag = src->tag;
   switch (src->tag) {
   case 5:
      fx_copy_str(&src->u.KLitString, &dst->u.KLitString); break;
   case 8:
      FX_COPY_PTR(src->u.KLitNil, &dst->u.KLitNil); break;
   default:
      dst->u = src->u;
   }
}

static void _fx_free_T2LN14K_form__ktyp_tN14K_form__ktyp_t(struct _fx_T2LN14K_form__ktyp_tN14K_form__ktyp_t* dst)
{
   _fx_free_LN14K_form__ktyp_t(&dst->t0);
   _fx_free_N14K_form__ktyp_t(&dst->t1);
}

static void _fx_copy_T2LN14K_form__ktyp_tN14K_form__ktyp_t(
   struct _fx_T2LN14K_form__ktyp_tN14K_form__ktyp_t* src,
   struct _fx_T2LN14K_form__ktyp_tN14K_form__ktyp_t* dst)
{
   FX_COPY_PTR(src->t0, &dst->t0);
   FX_COPY_PTR(src->t1, &dst->t1);
}

static void _fx_make_T2LN14K_form__ktyp_tN14K_form__ktyp_t(
   struct _fx_LN14K_form__ktyp_t_data_t* t0,
   struct _fx_N14K_form__ktyp_t_data_t* t1,
   struct _fx_T2LN14K_form__ktyp_tN14K_form__ktyp_t* fx_result)
{
   FX_COPY_PTR(t0, &fx_result->t0);
   FX_COPY_PTR(t1, &fx_result->t1);
}

static void _fx_free_T2R9Ast__id_tLT2R9Ast__id_tN14K_form__ktyp_t(struct _fx_T2R9Ast__id_tLT2R9Ast__id_tN14K_form__ktyp_t* dst)
{
   _fx_free_LT2R9Ast__id_tN14K_form__ktyp_t(&dst->t1);
}

static void _fx_copy_T2R9Ast__id_tLT2R9Ast__id_tN14K_form__ktyp_t(
   struct _fx_T2R9Ast__id_tLT2R9Ast__id_tN14K_form__ktyp_t* src,
   struct _fx_T2R9Ast__id_tLT2R9Ast__id_tN14K_form__ktyp_t* dst)
{
   dst->t0 = src->t0;
   FX_COPY_PTR(src->t1, &dst->t1);
}

static void _fx_make_T2R9Ast__id_tLT2R9Ast__id_tN14K_form__ktyp_t(
   struct _fx_R9Ast__id_t* t0,
   struct _fx_LT2R9Ast__id_tN14K_form__ktyp_t_data_t* t1,
   struct _fx_T2R9Ast__id_tLT2R9Ast__id_tN14K_form__ktyp_t* fx_result)
{
   fx_result->t0 = *t0;
   FX_COPY_PTR(t1, &fx_result->t1);
}

static void _fx_free_T2iN14K_form__ktyp_t(struct _fx_T2iN14K_form__ktyp_t* dst)
{
   _fx_free_N14K_form__ktyp_t(&dst->t1);
}

static void _fx_copy_T2iN14K_form__ktyp_t(struct _fx_T2iN14K_form__ktyp_t* src, struct _fx_T2iN14K_form__ktyp_t* dst)
{
   dst->t0 = src->t0;
   FX_COPY_PTR(src->t1, &dst->t1);
}

static void _fx_make_T2iN14K_form__ktyp_t(
   int_ t0,
   struct _fx_N14K_form__ktyp_t_data_t* t1,
   struct _fx_T2iN14K_form__ktyp_t* fx_result)
{
   fx_result->t0 = t0;
   FX_COPY_PTR(t1, &fx_result->t1);
}

static void _fx_free_N14K_form__ktyp_t(struct _fx_N14K_form__ktyp_t_data_t** dst)
{
   if (*dst && FX_DECREF((*dst)->rc) == 1) {
      switch ((*dst)->tag) {
      case 12:
         _fx_free_N14K_form__ktyp_t(&(*dst)->u.KTypRawPointer); break;
      case 13:
         _fx_free_T2LN14K_form__ktyp_tN14K_form__ktyp_t(&(*dst)->u.KTypFun); break;
      case 14:
         _fx_free_LN14K_form__ktyp_t(&(*dst)->u.KTypTuple); break;
      case 15:
         _fx_free_T2R9Ast__id_tLT2R9Ast__id_tN14K_form__ktyp_t(&(*dst)->u.KTypRecord); break;
      case 17:
         _fx_free_T2iN14K_form__ktyp_t(&(*dst)->u.KTypArray); break;
      case 18:
         _fx_free_N14K_form__ktyp_t(&(*dst)->u.KTypVector); break;
      case 19:
         _fx_free_N14K_form__ktyp_t(&(*dst)->u.KTypList); break;
      case 20:
         _fx_free_N14K_form__ktyp_t(&(*dst)->u.KTypRef); break;
      default:
         ;
      }
      fx_free(*dst);
   }
   *dst = 0;
}

static void _fx_free_Nt6option1N14C_form__ctyp_t(struct _fx_Nt6option1N14C_form__ctyp_t* dst)
{
   switch (dst->tag) {
   case 2:
      _fx_free_N14C_form__ctyp_t(&dst->u.Some); break;
   default:
      ;
   }
   dst->tag = 0;
}

static void _fx_copy_Nt6option1N14C_form__ctyp_t(
   struct _fx_Nt6option1N14C_form__ctyp_t* src,
   struct _fx_Nt6option1N14C_form__ctyp_t* dst)
{
   dst->tag = src->tag;
   switch (src->tag) {
   case 2:
      FX_COPY_PTR(src->u.Some, &dst->u.Some); break;
   default:
      dst->u = src->u;
   }
}

static void _fx_free_T2SR10Ast__loc_t(struct _fx_T2SR10Ast__loc_t* dst)
{
   fx_free_str(&dst->t0);
}

static void _fx_copy_T2SR10Ast__loc_t(struct _fx_T2SR10Ast__loc_t* src, struct _fx_T2SR10Ast__loc_t* dst)
{
   fx_copy_str(&src->t0, &dst->t0);
   dst->t1 = src->t1;
}

static void _fx_make_T2SR10Ast__loc_t(fx_str_t* t0, struct _fx_R10Ast__loc_t* t1, struct _fx_T2SR10Ast__loc_t* fx_result)
{
   fx_copy_str(t0, &fx_result->t0);
   fx_result->t1 = *t1;
}

static void _fx_free_T2Nt6option1R9Ast__id_tLT2R9Ast__id_tN14C_form__ctyp_t(
   struct _fx_T2Nt6option1R9Ast__id_tLT2R9Ast__id_tN14C_form__ctyp_t* dst)
{
   _fx_free_LT2R9Ast__id_tN14C_form__ctyp_t(&dst->t1);
}

static void _fx_copy_T2Nt6option1R9Ast__id_tLT2R9Ast__id_tN14C_form__ctyp_t(
   struct _fx_T2Nt6option1R9Ast__id_tLT2R9Ast__id_tN14C_form__ctyp_t* src,
   struct _fx_T2Nt6option1R9Ast__id_tLT2R9Ast__id_tN14C_form__ctyp_t* dst)
{
   dst->t0 = src->t0;
   FX_COPY_PTR(src->t1, &dst->t1);
}

static void _fx_make_T2Nt6option1R9Ast__id_tLT2R9Ast__id_tN14C_form__ctyp_t(
   struct _fx_Nt6option1R9Ast__id_t* t0,
   struct _fx_LT2R9Ast__id_tN14C_form__ctyp_t_data_t* t1,
   struct _fx_T2Nt6option1R9Ast__id_tLT2R9Ast__id_tN14C_form__ctyp_t* fx_result)
{
   fx_result->t0 = *t0;
   FX_COPY_PTR(t1, &fx_result->t1);
}

static void _fx_free_LN14C_form__ctyp_t(struct _fx_LN14C_form__ctyp_t_data_t** dst)
{
   FX_FREE_LIST_IMPL(_fx_LN14C_form__ctyp_t, _fx_free_N14C_form__ctyp_t);
}

static int _fx_cons_LN14C_form__ctyp_t(
   struct _fx_N14C_form__ctyp_t_data_t* hd,
   struct _fx_LN14C_form__ctyp_t_data_t* tl,
   bool addref_tl,
   struct _fx_LN14C_form__ctyp_t_data_t** fx_result)
{
   FX_MAKE_LIST_IMPL(_fx_LN14C_form__ctyp_t, FX_COPY_PTR);
}

static void _fx_free_T2LN14C_form__ctyp_tN14C_form__ctyp_t(struct _fx_T2LN14C_form__ctyp_tN14C_form__ctyp_t* dst)
{
   _fx_free_LN14C_form__ctyp_t(&dst->t0);
   _fx_free_N14C_form__ctyp_t(&dst->t1);
}

static void _fx_copy_T2LN14C_form__ctyp_tN14C_form__ctyp_t(
   struct _fx_T2LN14C_form__ctyp_tN14C_form__ctyp_t* src,
   struct _fx_T2LN14C_form__ctyp_tN14C_form__ctyp_t* dst)
{
   FX_COPY_PTR(src->t0, &dst->t0);
   FX_COPY_PTR(src->t1, &dst->t1);
}

static void _fx_make_T2LN14C_form__ctyp_tN14C_form__ctyp_t(
   struct _fx_LN14C_form__ctyp_t_data_t* t0,
   struct _fx_N14C_form__ctyp_t_data_t* t1,
   struct _fx_T2LN14C_form__ctyp_tN14C_form__ctyp_t* fx_result)
{
   FX_COPY_PTR(t0, &fx_result->t0);
   FX_COPY_PTR(t1, &fx_result->t1);
}

static int _fx_cons_LN19C_form__ctyp_attr_t(
   struct _fx_N19C_form__ctyp_attr_t* hd,
   struct _fx_LN19C_form__ctyp_attr_t_data_t* tl,
   bool addref_tl,
   struct _fx_LN19C_form__ctyp_attr_t_data_t** fx_result)
{
   FX_MAKE_LIST_IMPL(_fx_LN19C_form__ctyp_attr_t, FX_COPY_SIMPLE_BY_PTR);
}

static void _fx_free_T2LN19C_form__ctyp_attr_tN14C_form__ctyp_t(struct _fx_T2LN19C_form__ctyp_attr_tN14C_form__ctyp_t* dst)
{
   fx_free_list_simple(&dst->t0);
   _fx_free_N14C_form__ctyp_t(&dst->t1);
}

static void _fx_copy_T2LN19C_form__ctyp_attr_tN14C_form__ctyp_t(
   struct _fx_T2LN19C_form__ctyp_attr_tN14C_form__ctyp_t* src,
   struct _fx_T2LN19C_form__ctyp_attr_tN14C_form__ctyp_t* dst)
{
   FX_COPY_PTR(src->t0, &dst->t0);
   FX_COPY_PTR(src->t1, &dst->t1);
}

static void _fx_make_T2LN19C_form__ctyp_attr_tN14C_form__ctyp_t(
   struct _fx_LN19C_form__ctyp_attr_t_data_t* t0,
   struct _fx_N14C_form__ctyp_t_data_t* t1,
   struct _fx_T2LN19C_form__ctyp_attr_tN14C_form__ctyp_t* fx_result)
{
   FX_COPY_PTR(t0, &fx_result->t0);
   FX_COPY_PTR(t1, &fx_result->t1);
}

static void _fx_free_T2iN14C_form__ctyp_t(struct _fx_T2iN14C_form__ctyp_t* dst)
{
   _fx_free_N14C_form__ctyp_t(&dst->t1);
}

static void _fx_copy_T2iN14C_form__ctyp_t(struct _fx_T2iN14C_form__ctyp_t* src, struct _fx_T2iN14C_form__ctyp_t* dst)
{
   dst->t0 = src->t0;
   FX_COPY_PTR(src->t1, &dst->t1);
}

static void _fx_make_T2iN14C_form__ctyp_t(
   int_ t0,
   struct _fx_N14C_form__ctyp_t_data_t* t1,
   struct _fx_T2iN14C_form__ctyp_t* fx_result)
{
   fx_result->t0 = t0;
   FX_COPY_PTR(t1, &fx_result->t1);
}

static void _fx_free_N14C_form__ctyp_t(struct _fx_N14C_form__ctyp_t_data_t** dst)
{
   if (*dst && FX_DECREF((*dst)->rc) == 1) {
      switch ((*dst)->tag) {
      case 14:
         _fx_free_T2Nt6option1R9Ast__id_tLT2R9Ast__id_tN14C_form__ctyp_t(&(*dst)->u.CTypStruct); break;
      case 15:
         _fx_free_T2Nt6option1R9Ast__id_tLT2R9Ast__id_tN14C_form__ctyp_t(&(*dst)->u.CTypUnion); break;
      case 16:
         _fx_free_T2LN14C_form__ctyp_tN14C_form__ctyp_t(&(*dst)->u.CTypFunRawPtr); break;
      case 17:
         _fx_free_T2LN19C_form__ctyp_attr_tN14C_form__ctyp_t(&(*dst)->u.CTypRawPtr); break;
      case 18:
         _fx_free_T2LN19C_form__ctyp_attr_tN14C_form__ctyp_t(&(*dst)->u.CTypRawArray); break;
      case 19:
         _fx_free_T2iN14C_form__ctyp_t(&(*dst)->u.CTypArray); break;
      case 20:
         _fx_free_N14C_form__ctyp_t(&(*dst)->u.CTypVector); break;
      default:
         ;
      }
      fx_free(*dst);
   }
   *dst = 0;
}

static void _fx_free_T2N14C_form__ctyp_tR10Ast__loc_t(struct _fx_T2N14C_form__ctyp_tR10Ast__loc_t* dst)
{
   _fx_free_N14C_form__ctyp_t(&dst->t0);
}

static void _fx_copy_T2N14C_form__ctyp_tR10Ast__loc_t(
   struct _fx_T2N14C_form__ctyp_tR10Ast__loc_t* src,
   struct _fx_T2N14C_form__ctyp_tR10Ast__loc_t* dst)
{
   FX_COPY_PTR(src->t0, &dst->t0);
   dst->t1 = src->t1;
}

static void _fx_make_T2N14C_form__ctyp_tR10Ast__loc_t(
   struct _fx_N14C_form__ctyp_t_data_t* t0,
   struct _fx_R10Ast__loc_t* t1,
   struct _fx_T2N14C_form__ctyp_tR10Ast__loc_t* fx_result)
{
   FX_COPY_PTR(t0, &fx_result->t0);
   fx_result->t1 = *t1;
}

static void _fx_free_T2R9Ast__id_tT2N14C_form__ctyp_tR10Ast__loc_t(
   struct _fx_T2R9Ast__id_tT2N14C_form__ctyp_tR10Ast__loc_t* dst)
{
   _fx_free_T2N14C_form__ctyp_tR10Ast__loc_t(&dst->t1);
}

static void _fx_copy_T2R9Ast__id_tT2N14C_form__ctyp_tR10Ast__loc_t(
   struct _fx_T2R9Ast__id_tT2N14C_form__ctyp_tR10Ast__loc_t* src,
   struct _fx_T2R9Ast__id_tT2N14C_form__ctyp_tR10Ast__loc_t* dst)
{
   dst->t0 = src->t0;
   _fx_copy_T2N14C_form__ctyp_tR10Ast__loc_t(&src->t1, &dst->t1);
}

static void _fx_make_T2R9Ast__id_tT2N14C_form__ctyp_tR10Ast__loc_t(
   struct _fx_R9Ast__id_t* t0,
   struct _fx_T2N14C_form__ctyp_tR10Ast__loc_t* t1,
   struct _fx_T2R9Ast__id_tT2N14C_form__ctyp_tR10Ast__loc_t* fx_result)
{
   fx_result->t0 = *t0;
   _fx_copy_T2N14C_form__ctyp_tR10Ast__loc_t(t1, &fx_result->t1);
}

static void _fx_free_T2N14K_form__klit_tT2N14C_form__ctyp_tR10Ast__loc_t(
   struct _fx_T2N14K_form__klit_tT2N14C_form__ctyp_tR10Ast__loc_t* dst)
{
   _fx_free_N14K_form__klit_t(&dst->t0);
   _fx_free_T2N14C_form__ctyp_tR10Ast__loc_t(&dst->t1);
}

static void _fx_copy_T2N14K_form__klit_tT2N14C_form__ctyp_tR10Ast__loc_t(
   struct _fx_T2N14K_form__klit_tT2N14C_form__ctyp_tR10Ast__loc_t* src,
   struct _fx_T2N14K_form__klit_tT2N14C_form__ctyp_tR10Ast__loc_t* dst)
{
   _fx_copy_N14K_form__klit_t(&src->t0, &dst->t0);
   _fx_copy_T2N14C_form__ctyp_tR10Ast__loc_t(&src->t1, &dst->t1);
}

static void _fx_make_T2N14K_form__klit_tT2N14C_form__ctyp_tR10Ast__loc_t(
   struct _fx_N14K_form__klit_t* t0,
   struct _fx_T2N14C_form__ctyp_tR10Ast__loc_t* t1,
   struct _fx_T2N14K_form__klit_tT2N14C_form__ctyp_tR10Ast__loc_t* fx_result)
{
   _fx_copy_N14K_form__klit_t(t0, &fx_result->t0);
   _fx_copy_T2N14C_form__ctyp_tR10Ast__loc_t(t1, &fx_result->t1);
}

static void _fx_free_T4N17C_form__cbinary_tN14C_form__cexp_tN14C_form__cexp_tT2N14C_form__ctyp_tR10Ast__loc_t(
   struct _fx_T4N17C_form__cbinary_tN14C_form__cexp_tN14C_form__cexp_tT2N14C_form__ctyp_tR10Ast__loc_t* dst)
{
   _fx_free_N14C_form__cexp_t(&dst->t1);
   _fx_free_N14C_form__cexp_t(&dst->t2);
   _fx_free_T2N14C_form__ctyp_tR10Ast__loc_t(&dst->t3);
}

static void _fx_copy_T4N17C_form__cbinary_tN14C_form__cexp_tN14C_form__cexp_tT2N14C_form__ctyp_tR10Ast__loc_t(
   struct _fx_T4N17C_form__cbinary_tN14C_form__cexp_tN14C_form__cexp_tT2N14C_form__ctyp_tR10Ast__loc_t* src,
   struct _fx_T4N17C_form__cbinary_tN14C_form__cexp_tN14C_form__cexp_tT2N14C_form__ctyp_tR10Ast__loc_t* dst)
{
   dst->t0 = src->t0;
   FX_COPY_PTR(src->t1, &dst->t1);
   FX_COPY_PTR(src->t2, &dst->t2);
   _fx_copy_T2N14C_form__ctyp_tR10Ast__loc_t(&src->t3, &dst->t3);
}

static void _fx_make_T4N17C_form__cbinary_tN14C_form__cexp_tN14C_form__cexp_tT2N14C_form__ctyp_tR10Ast__loc_t(
   struct _fx_N17C_form__cbinary_t* t0,
   struct _fx_N14C_form__cexp_t_data_t* t1,
   struct _fx_N14C_form__cexp_t_data_t* t2,
   struct _fx_T2N14C_form__ctyp_tR10Ast__loc_t* t3,
   struct _fx_T4N17C_form__cbinary_tN14C_form__cexp_tN14C_form__cexp_tT2N14C_form__ctyp_tR10Ast__loc_t* fx_result)
{
   fx_result->t0 = *t0;
   FX_COPY_PTR(t1, &fx_result->t1);
   FX_COPY_PTR(t2, &fx_result->t2);
   _fx_copy_T2N14C_form__ctyp_tR10Ast__loc_t(t3, &fx_result->t3);
}

static void _fx_free_T3N16C_form__cunary_tN14C_form__cexp_tT2N14C_form__ctyp_tR10Ast__loc_t(
   struct _fx_T3N16C_form__cunary_tN14C_form__cexp_tT2N14C_form__ctyp_tR10Ast__loc_t* dst)
{
   _fx_free_N14C_form__cexp_t(&dst->t1);
   _fx_free_T2N14C_form__ctyp_tR10Ast__loc_t(&dst->t2);
}

static void _fx_copy_T3N16C_form__cunary_tN14C_form__cexp_tT2N14C_form__ctyp_tR10Ast__loc_t(
   struct _fx_T3N16C_form__cunary_tN14C_form__cexp_tT2N14C_form__ctyp_tR10Ast__loc_t* src,
   struct _fx_T3N16C_form__cunary_tN14C_form__cexp_tT2N14C_form__ctyp_tR10Ast__loc_t* dst)
{
   dst->t0 = src->t0;
   FX_COPY_PTR(src->t1, &dst->t1);
   _fx_copy_T2N14C_form__ctyp_tR10Ast__loc_t(&src->t2, &dst->t2);
}

static void _fx_make_T3N16C_form__cunary_tN14C_form__cexp_tT2N14C_form__ctyp_tR10Ast__loc_t(
   struct _fx_N16C_form__cunary_t* t0,
   struct _fx_N14C_form__cexp_t_data_t* t1,
   struct _fx_T2N14C_form__ctyp_tR10Ast__loc_t* t2,
   struct _fx_T3N16C_form__cunary_tN14C_form__cexp_tT2N14C_form__ctyp_tR10Ast__loc_t* fx_result)
{
   fx_result->t0 = *t0;
   FX_COPY_PTR(t1, &fx_result->t1);
   _fx_copy_T2N14C_form__ctyp_tR10Ast__loc_t(t2, &fx_result->t2);
}

static void _fx_free_T3N14C_form__cexp_tR9Ast__id_tT2N14C_form__ctyp_tR10Ast__loc_t(
   struct _fx_T3N14C_form__cexp_tR9Ast__id_tT2N14C_form__ctyp_tR10Ast__loc_t* dst)
{
   _fx_free_N14C_form__cexp_t(&dst->t0);
   _fx_free_T2N14C_form__ctyp_tR10Ast__loc_t(&dst->t2);
}

static void _fx_copy_T3N14C_form__cexp_tR9Ast__id_tT2N14C_form__ctyp_tR10Ast__loc_t(
   struct _fx_T3N14C_form__cexp_tR9Ast__id_tT2N14C_form__ctyp_tR10Ast__loc_t* src,
   struct _fx_T3N14C_form__cexp_tR9Ast__id_tT2N14C_form__ctyp_tR10Ast__loc_t* dst)
{
   FX_COPY_PTR(src->t0, &dst->t0);
   dst->t1 = src->t1;
   _fx_copy_T2N14C_form__ctyp_tR10Ast__loc_t(&src->t2, &dst->t2);
}

static void _fx_make_T3N14C_form__cexp_tR9Ast__id_tT2N14C_form__ctyp_tR10Ast__loc_t(
   struct _fx_N14C_form__cexp_t_data_t* t0,
   struct _fx_R9Ast__id_t* t1,
   struct _fx_T2N14C_form__ctyp_tR10Ast__loc_t* t2,
   struct _fx_T3N14C_form__cexp_tR9Ast__id_tT2N14C_form__ctyp_tR10Ast__loc_t* fx_result)
{
   FX_COPY_PTR(t0, &fx_result->t0);
   fx_result->t1 = *t1;
   _fx_copy_T2N14C_form__ctyp_tR10Ast__loc_t(t2, &fx_result->t2);
}

static void _fx_free_T3N14C_form__cexp_tN14C_form__ctyp_tR10Ast__loc_t(
   struct _fx_T3N14C_form__cexp_tN14C_form__ctyp_tR10Ast__loc_t* dst)
{
   _fx_free_N14C_form__cexp_t(&dst->t0);
   _fx_free_N14C_form__ctyp_t(&dst->t1);
}

static void _fx_copy_T3N14C_form__cexp_tN14C_form__ctyp_tR10Ast__loc_t(
   struct _fx_T3N14C_form__cexp_tN14C_form__ctyp_tR10Ast__loc_t* src,
   struct _fx_T3N14C_form__cexp_tN14C_form__ctyp_tR10Ast__loc_t* dst)
{
   FX_COPY_PTR(src->t0, &dst->t0);
   FX_COPY_PTR(src->t1, &dst->t1);
   dst->t2 = src->t2;
}

static void _fx_make_T3N14C_form__cexp_tN14C_form__ctyp_tR10Ast__loc_t(
   struct _fx_N14C_form__cexp_t_data_t* t0,
   struct _fx_N14C_form__ctyp_t_data_t* t1,
   struct _fx_R10Ast__loc_t* t2,
   struct _fx_T3N14C_form__cexp_tN14C_form__ctyp_tR10Ast__loc_t* fx_result)
{
   FX_COPY_PTR(t0, &fx_result->t0);
   FX_COPY_PTR(t1, &fx_result->t1);
   fx_result->t2 = *t2;
}

static void _fx_free_T4N14C_form__cexp_tN14C_form__cexp_tN14C_form__cexp_tT2N14C_form__ctyp_tR10Ast__loc_t(
   struct _fx_T4N14C_form__cexp_tN14C_form__cexp_tN14C_form__cexp_tT2N14C_form__ctyp_tR10Ast__loc_t* dst)
{
   _fx_free_N14C_form__cexp_t(&dst->t0);
   _fx_free_N14C_form__cexp_t(&dst->t1);
   _fx_free_N14C_form__cexp_t(&dst->t2);
   _fx_free_T2N14C_form__ctyp_tR10Ast__loc_t(&dst->t3);
}

static void _fx_copy_T4N14C_form__cexp_tN14C_form__cexp_tN14C_form__cexp_tT2N14C_form__ctyp_tR10Ast__loc_t(
   struct _fx_T4N14C_form__cexp_tN14C_form__cexp_tN14C_form__cexp_tT2N14C_form__ctyp_tR10Ast__loc_t* src,
   struct _fx_T4N14C_form__cexp_tN14C_form__cexp_tN14C_form__cexp_tT2N14C_form__ctyp_tR10Ast__loc_t* dst)
{
   FX_COPY_PTR(src->t0, &dst->t0);
   FX_COPY_PTR(src->t1, &dst->t1);
   FX_COPY_PTR(src->t2, &dst->t2);
   _fx_copy_T2N14C_form__ctyp_tR10Ast__loc_t(&src->t3, &dst->t3);
}

static void _fx_make_T4N14C_form__cexp_tN14C_form__cexp_tN14C_form__cexp_tT2N14C_form__ctyp_tR10Ast__loc_t(
   struct _fx_N14C_form__cexp_t_data_t* t0,
   struct _fx_N14C_form__cexp_t_data_t* t1,
   struct _fx_N14C_form__cexp_t_data_t* t2,
   struct _fx_T2N14C_form__ctyp_tR10Ast__loc_t* t3,
   struct _fx_T4N14C_form__cexp_tN14C_form__cexp_tN14C_form__cexp_tT2N14C_form__ctyp_tR10Ast__loc_t* fx_result)
{
   FX_COPY_PTR(t0, &fx_result->t0);
   FX_COPY_PTR(t1, &fx_result->t1);
   FX_COPY_PTR(t2, &fx_result->t2);
   _fx_copy_T2N14C_form__ctyp_tR10Ast__loc_t(t3, &fx_result->t3);
}

static void _fx_free_LN14C_form__cexp_t(struct _fx_LN14C_form__cexp_t_data_t** dst)
{
   FX_FREE_LIST_IMPL(_fx_LN14C_form__cexp_t, _fx_free_N14C_form__cexp_t);
}

static int _fx_cons_LN14C_form__cexp_t(
   struct _fx_N14C_form__cexp_t_data_t* hd,
   struct _fx_LN14C_form__cexp_t_data_t* tl,
   bool addref_tl,
   struct _fx_LN14C_form__cexp_t_data_t** fx_result)
{
   FX_MAKE_LIST_IMPL(_fx_LN14C_form__cexp_t, FX_COPY_PTR);
}

static void _fx_free_T3N14C_form__cexp_tLN14C_form__cexp_tT2N14C_form__ctyp_tR10Ast__loc_t(
   struct _fx_T3N14C_form__cexp_tLN14C_form__cexp_tT2N14C_form__ctyp_tR10Ast__loc_t* dst)
{
   _fx_free_N14C_form__cexp_t(&dst->t0);
   _fx_free_LN14C_form__cexp_t(&dst->t1);
   _fx_free_T2N14C_form__ctyp_tR10Ast__loc_t(&dst->t2);
}

static void _fx_copy_T3N14C_form__cexp_tLN14C_form__cexp_tT2N14C_form__ctyp_tR10Ast__loc_t(
   struct _fx_T3N14C_form__cexp_tLN14C_form__cexp_tT2N14C_form__ctyp_tR10Ast__loc_t* src,
   struct _fx_T3N14C_form__cexp_tLN14C_form__cexp_tT2N14C_form__ctyp_tR10Ast__loc_t* dst)
{
   FX_COPY_PTR(src->t0, &dst->t0);
   FX_COPY_PTR(src->t1, &dst->t1);
   _fx_copy_T2N14C_form__ctyp_tR10Ast__loc_t(&src->t2, &dst->t2);
}

static void _fx_make_T3N14C_form__cexp_tLN14C_form__cexp_tT2N14C_form__ctyp_tR10Ast__loc_t(
   struct _fx_N14C_form__cexp_t_data_t* t0,
   struct _fx_LN14C_form__cexp_t_data_t* t1,
   struct _fx_T2N14C_form__ctyp_tR10Ast__loc_t* t2,
   struct _fx_T3N14C_form__cexp_tLN14C_form__cexp_tT2N14C_form__ctyp_tR10Ast__loc_t* fx_result)
{
   FX_COPY_PTR(t0, &fx_result->t0);
   FX_COPY_PTR(t1, &fx_result->t1);
   _fx_copy_T2N14C_form__ctyp_tR10Ast__loc_t(t2, &fx_result->t2);
}

static void _fx_free_T2LN14C_form__cexp_tT2N14C_form__ctyp_tR10Ast__loc_t(
   struct _fx_T2LN14C_form__cexp_tT2N14C_form__ctyp_tR10Ast__loc_t* dst)
{
   _fx_free_LN14C_form__cexp_t(&dst->t0);
   _fx_free_T2N14C_form__ctyp_tR10Ast__loc_t(&dst->t1);
}

static void _fx_copy_T2LN14C_form__cexp_tT2N14C_form__ctyp_tR10Ast__loc_t(
   struct _fx_T2LN14C_form__cexp_tT2N14C_form__ctyp_tR10Ast__loc_t* src,
   struct _fx_T2LN14C_form__cexp_tT2N14C_form__ctyp_tR10Ast__loc_t* dst)
{
   FX_COPY_PTR(src->t0, &dst->t0);
   _fx_copy_T2N14C_form__ctyp_tR10Ast__loc_t(&src->t1, &dst->t1);
}

static void _fx_make_T2LN14C_form__cexp_tT2N14C_form__ctyp_tR10Ast__loc_t(
   struct _fx_LN14C_form__cexp_t_data_t* t0,
   struct _fx_T2N14C_form__ctyp_tR10Ast__loc_t* t1,
   struct _fx_T2LN14C_form__cexp_tT2N14C_form__ctyp_tR10Ast__loc_t* fx_result)
{
   FX_COPY_PTR(t0, &fx_result->t0);
   _fx_copy_T2N14C_form__ctyp_tR10Ast__loc_t(t1, &fx_result->t1);
}

static void _fx_free_N14C_form__cexp_t(struct _fx_N14C_form__cexp_t_data_t** dst)
{
   if (*dst && FX_DECREF((*dst)->rc) == 1) {
      switch ((*dst)->tag) {
      case 1:
         _fx_free_T2R9Ast__id_tT2N14C_form__ctyp_tR10Ast__loc_t(&(*dst)->u.CExpIdent); break;
      case 2:
         _fx_free_T2N14K_form__klit_tT2N14C_form__ctyp_tR10Ast__loc_t(&(*dst)->u.CExpLit); break;
      case 3:
         _fx_free_T4N17C_form__cbinary_tN14C_form__cexp_tN14C_form__cexp_tT2N14C_form__ctyp_tR10Ast__loc_t(
            &(*dst)->u.CExpBinary);
         break;
      case 4:
         _fx_free_T3N16C_form__cunary_tN14C_form__cexp_tT2N14C_form__ctyp_tR10Ast__loc_t(&(*dst)->u.CExpUnary); break;
      case 5:
         _fx_free_T3N14C_form__cexp_tR9Ast__id_tT2N14C_form__ctyp_tR10Ast__loc_t(&(*dst)->u.CExpMem); break;
      case 6:
         _fx_free_T3N14C_form__cexp_tR9Ast__id_tT2N14C_form__ctyp_tR10Ast__loc_t(&(*dst)->u.CExpArrow); break;
      case 7:
         _fx_free_T3N14C_form__cexp_tN14C_form__ctyp_tR10Ast__loc_t(&(*dst)->u.CExpCast); break;
      case 8:
         _fx_free_T4N14C_form__cexp_tN14C_form__cexp_tN14C_form__cexp_tT2N14C_form__ctyp_tR10Ast__loc_t(&(*dst)->u.CExpTernary);
         break;
      case 9:
         _fx_free_T3N14C_form__cexp_tLN14C_form__cexp_tT2N14C_form__ctyp_tR10Ast__loc_t(&(*dst)->u.CExpCall); break;
      case 10:
         _fx_free_T2LN14C_form__cexp_tT2N14C_form__ctyp_tR10Ast__loc_t(&(*dst)->u.CExpInit); break;
      case 11:
         _fx_free_T2N14C_form__ctyp_tR10Ast__loc_t(&(*dst)->u.CExpTyp); break;
      case 12:
         _fx_free_T2SR10Ast__loc_t(&(*dst)->u.CExpCCode); break;
      default:
         ;
      }
      fx_free(*dst);
   }
   *dst = 0;
}

static void _fx_free_T2Nt6option1N14C_form__cexp_tR10Ast__loc_t(struct _fx_T2Nt6option1N14C_form__cexp_tR10Ast__loc_t* dst)
{
   _fx_free_Nt6option1N14C_form__cexp_t(&dst->t0);
}

static void _fx_copy_T2Nt6option1N14C_form__cexp_tR10Ast__loc_t(
   struct _fx_T2Nt6option1N14C_form__cexp_tR10Ast__loc_t* src,
   struct _fx_T2Nt6option1N14C_form__cexp_tR10Ast__loc_t* dst)
{
   _fx_copy_Nt6option1N14C_form__cexp_t(&src->t0, &dst->t0);
   dst->t1 = src->t1;
}

static void _fx_make_T2Nt6option1N14C_form__cexp_tR10Ast__loc_t(
   struct _fx_Nt6option1N14C_form__cexp_t* t0,
   struct _fx_R10Ast__loc_t* t1,
   struct _fx_T2Nt6option1N14C_form__cexp_tR10Ast__loc_t* fx_result)
{
   _fx_copy_Nt6option1N14C_form__cexp_t(t0, &fx_result->t0);
   fx_result->t1 = *t1;
}

static void _fx_free_T2LN15C_form__cstmt_tR10Ast__loc_t(struct _fx_T2LN15C_form__cstmt_tR10Ast__loc_t* dst)
{
   _fx_free_LN15C_form__cstmt_t(&dst->t0);
}

static void _fx_copy_T2LN15C_form__cstmt_tR10Ast__loc_t(
   struct _fx_T2LN15C_form__cstmt_tR10Ast__loc_t* src,
   struct _fx_T2LN15C_form__cstmt_tR10Ast__loc_t* dst)
{
   FX_COPY_PTR(src->t0, &dst->t0);
   dst->t1 = src->t1;
}

static void _fx_make_T2LN15C_form__cstmt_tR10Ast__loc_t(
   struct _fx_LN15C_form__cstmt_t_data_t* t0,
   struct _fx_R10Ast__loc_t* t1,
   struct _fx_T2LN15C_form__cstmt_tR10Ast__loc_t* fx_result)
{
   FX_COPY_PTR(t0, &fx_result->t0);
   fx_result->t1 = *t1;
}

static void _fx_free_T2R9Ast__id_tN15C_form__cstmt_t(struct _fx_T2R9Ast__id_tN15C_form__cstmt_t* dst)
{
   _fx_free_N15C_form__cstmt_t(&dst->t1);
}

static void _fx_copy_T2R9Ast__id_tN15C_form__cstmt_t(
   struct _fx_T2R9Ast__id_tN15C_form__cstmt_t* src,
   struct _fx_T2R9Ast__id_tN15C_form__cstmt_t* dst)
{
   dst->t0 = src->t0;
   FX_COPY_PTR(src->t1, &dst->t1);
}

static void _fx_make_T2R9Ast__id_tN15C_form__cstmt_t(
   struct _fx_R9Ast__id_t* t0,
   struct _fx_N15C_form__cstmt_t_data_t* t1,
   struct _fx_T2R9Ast__id_tN15C_form__cstmt_t* fx_result)
{
   fx_result->t0 = *t0;
   FX_COPY_PTR(t1, &fx_result->t1);
}

static void _fx_free_T4N14C_form__cexp_tN15C_form__cstmt_tN15C_form__cstmt_tR10Ast__loc_t(
   struct _fx_T4N14C_form__cexp_tN15C_form__cstmt_tN15C_form__cstmt_tR10Ast__loc_t* dst)
{
   _fx_free_N14C_form__cexp_t(&dst->t0);
   _fx_free_N15C_form__cstmt_t(&dst->t1);
   _fx_free_N15C_form__cstmt_t(&dst->t2);
}

static void _fx_copy_T4N14C_form__cexp_tN15C_form__cstmt_tN15C_form__cstmt_tR10Ast__loc_t(
   struct _fx_T4N14C_form__cexp_tN15C_form__cstmt_tN15C_form__cstmt_tR10Ast__loc_t* src,
   struct _fx_T4N14C_form__cexp_tN15C_form__cstmt_tN15C_form__cstmt_tR10Ast__loc_t* dst)
{
   FX_COPY_PTR(src->t0, &dst->t0);
   FX_COPY_PTR(src->t1, &dst->t1);
   FX_COPY_PTR(src->t2, &dst->t2);
   dst->t3 = src->t3;
}

static void _fx_make_T4N14C_form__cexp_tN15C_form__cstmt_tN15C_form__cstmt_tR10Ast__loc_t(
   struct _fx_N14C_form__cexp_t_data_t* t0,
   struct _fx_N15C_form__cstmt_t_data_t* t1,
   struct _fx_N15C_form__cstmt_t_data_t* t2,
   struct _fx_R10Ast__loc_t* t3,
   struct _fx_T4N14C_form__cexp_tN15C_form__cstmt_tN15C_form__cstmt_tR10Ast__loc_t* fx_result)
{
   FX_COPY_PTR(t0, &fx_result->t0);
   FX_COPY_PTR(t1, &fx_result->t1);
   FX_COPY_PTR(t2, &fx_result->t2);
   fx_result->t3 = *t3;
}

static void
   _fx_free_T6Nt6option1N14C_form__ctyp_tLN14C_form__cexp_tNt6option1N14C_form__cexp_tLN14C_form__cexp_tN15C_form__cstmt_tR10Ast__loc_t(
   struct _fx_T6Nt6option1N14C_form__ctyp_tLN14C_form__cexp_tNt6option1N14C_form__cexp_tLN14C_form__cexp_tN15C_form__cstmt_tR10Ast__loc_t*
      dst)
{
   _fx_free_Nt6option1N14C_form__ctyp_t(&dst->t0);
   _fx_free_LN14C_form__cexp_t(&dst->t1);
   _fx_free_Nt6option1N14C_form__cexp_t(&dst->t2);
   _fx_free_LN14C_form__cexp_t(&dst->t3);
   _fx_free_N15C_form__cstmt_t(&dst->t4);
}

static void
   _fx_copy_T6Nt6option1N14C_form__ctyp_tLN14C_form__cexp_tNt6option1N14C_form__cexp_tLN14C_form__cexp_tN15C_form__cstmt_tR10Ast__loc_t(
   struct _fx_T6Nt6option1N14C_form__ctyp_tLN14C_form__cexp_tNt6option1N14C_form__cexp_tLN14C_form__cexp_tN15C_form__cstmt_tR10Ast__loc_t*
      src,
   struct _fx_T6Nt6option1N14C_form__ctyp_tLN14C_form__cexp_tNt6option1N14C_form__cexp_tLN14C_form__cexp_tN15C_form__cstmt_tR10Ast__loc_t*
      dst)
{
   _fx_copy_Nt6option1N14C_form__ctyp_t(&src->t0, &dst->t0);
   FX_COPY_PTR(src->t1, &dst->t1);
   _fx_copy_Nt6option1N14C_form__cexp_t(&src->t2, &dst->t2);
   FX_COPY_PTR(src->t3, &dst->t3);
   FX_COPY_PTR(src->t4, &dst->t4);
   dst->t5 = src->t5;
}

static void
   _fx_make_T6Nt6option1N14C_form__ctyp_tLN14C_form__cexp_tNt6option1N14C_form__cexp_tLN14C_form__cexp_tN15C_form__cstmt_tR10Ast__loc_t(
   struct _fx_Nt6option1N14C_form__ctyp_t* t0,
   struct _fx_LN14C_form__cexp_t_data_t* t1,
   struct _fx_Nt6option1N14C_form__cexp_t* t2,
   struct _fx_LN14C_form__cexp_t_data_t* t3,
   struct _fx_N15C_form__cstmt_t_data_t* t4,
   struct _fx_R10Ast__loc_t* t5,
   struct _fx_T6Nt6option1N14C_form__ctyp_tLN14C_form__cexp_tNt6option1N14C_form__cexp_tLN14C_form__cexp_tN15C_form__cstmt_tR10Ast__loc_t*
      fx_result)
{
   _fx_copy_Nt6option1N14C_form__ctyp_t(t0, &fx_result->t0);
   FX_COPY_PTR(t1, &fx_result->t1);
   _fx_copy_Nt6option1N14C_form__cexp_t(t2, &fx_result->t2);
   FX_COPY_PTR(t3, &fx_result->t3);
   FX_COPY_PTR(t4, &fx_result->t4);
   fx_result->t5 = *t5;
}

static void _fx_free_T3N14C_form__cexp_tN15C_form__cstmt_tR10Ast__loc_t(
   struct _fx_T3N14C_form__cexp_tN15C_form__cstmt_tR10Ast__loc_t* dst)
{
   _fx_free_N14C_form__cexp_t(&dst->t0);
   _fx_free_N15C_form__cstmt_t(&dst->t1);
}

static void _fx_copy_T3N14C_form__cexp_tN15C_form__cstmt_tR10Ast__loc_t(
   struct _fx_T3N14C_form__cexp_tN15C_form__cstmt_tR10Ast__loc_t* src,
   struct _fx_T3N14C_form__cexp_tN15C_form__cstmt_tR10Ast__loc_t* dst)
{
   FX_COPY_PTR(src->t0, &dst->t0);
   FX_COPY_PTR(src->t1, &dst->t1);
   dst->t2 = src->t2;
}

static void _fx_make_T3N14C_form__cexp_tN15C_form__cstmt_tR10Ast__loc_t(
   struct _fx_N14C_form__cexp_t_data_t* t0,
   struct _fx_N15C_form__cstmt_t_data_t* t1,
   struct _fx_R10Ast__loc_t* t2,
   struct _fx_T3N14C_form__cexp_tN15C_form__cstmt_tR10Ast__loc_t* fx_result)
{
   FX_COPY_PTR(t0, &fx_result->t0);
   FX_COPY_PTR(t1, &fx_result->t1);
   fx_result->t2 = *t2;
}

static void _fx_free_T3N15C_form__cstmt_tN14C_form__cexp_tR10Ast__loc_t(
   struct _fx_T3N15C_form__cstmt_tN14C_form__cexp_tR10Ast__loc_t* dst)
{
   _fx_free_N15C_form__cstmt_t(&dst->t0);
   _fx_free_N14C_form__cexp_t(&dst->t1);
}

static void _fx_copy_T3N15C_form__cstmt_tN14C_form__cexp_tR10Ast__loc_t(
   struct _fx_T3N15C_form__cstmt_tN14C_form__cexp_tR10Ast__loc_t* src,
   struct _fx_T3N15C_form__cstmt_tN14C_form__cexp_tR10Ast__loc_t* dst)
{
   FX_COPY_PTR(src->t0, &dst->t0);
   FX_COPY_PTR(src->t1, &dst->t1);
   dst->t2 = src->t2;
}

static void _fx_make_T3N15C_form__cstmt_tN14C_form__cexp_tR10Ast__loc_t(
   struct _fx_N15C_form__cstmt_t_data_t* t0,
   struct _fx_N14C_form__cexp_t_data_t* t1,
   struct _fx_R10Ast__loc_t* t2,
   struct _fx_T3N15C_form__cstmt_tN14C_form__cexp_tR10Ast__loc_t* fx_result)
{
   FX_COPY_PTR(t0, &fx_result->t0);
   FX_COPY_PTR(t1, &fx_result->t1);
   fx_result->t2 = *t2;
}

static void _fx_free_T2LN14C_form__cexp_tLN15C_form__cstmt_t(struct _fx_T2LN14C_form__cexp_tLN15C_form__cstmt_t* dst)
{
   _fx_free_LN14C_form__cexp_t(&dst->t0);
   _fx_free_LN15C_form__cstmt_t(&dst->t1);
}

static void _fx_copy_T2LN14C_form__cexp_tLN15C_form__cstmt_t(
   struct _fx_T2LN14C_form__cexp_tLN15C_form__cstmt_t* src,
   struct _fx_T2LN14C_form__cexp_tLN15C_form__cstmt_t* dst)
{
   FX_COPY_PTR(src->t0, &dst->t0);
   FX_COPY_PTR(src->t1, &dst->t1);
}

static void _fx_make_T2LN14C_form__cexp_tLN15C_form__cstmt_t(
   struct _fx_LN14C_form__cexp_t_data_t* t0,
   struct _fx_LN15C_form__cstmt_t_data_t* t1,
   struct _fx_T2LN14C_form__cexp_tLN15C_form__cstmt_t* fx_result)
{
   FX_COPY_PTR(t0, &fx_result->t0);
   FX_COPY_PTR(t1, &fx_result->t1);
}

static void _fx_free_LT2LN14C_form__cexp_tLN15C_form__cstmt_t(struct _fx_LT2LN14C_form__cexp_tLN15C_form__cstmt_t_data_t** dst)
{
   FX_FREE_LIST_IMPL(_fx_LT2LN14C_form__cexp_tLN15C_form__cstmt_t, _fx_free_T2LN14C_form__cexp_tLN15C_form__cstmt_t);
}

static int _fx_cons_LT2LN14C_form__cexp_tLN15C_form__cstmt_t(
   struct _fx_T2LN14C_form__cexp_tLN15C_form__cstmt_t* hd,
   struct _fx_LT2LN14C_form__cexp_tLN15C_form__cstmt_t_data_t* tl,
   bool addref_tl,
   struct _fx_LT2LN14C_form__cexp_tLN15C_form__cstmt_t_data_t** fx_result)
{
   FX_MAKE_LIST_IMPL(_fx_LT2LN14C_form__cexp_tLN15C_form__cstmt_t, _fx_copy_T2LN14C_form__cexp_tLN15C_form__cstmt_t);
}

static void _fx_free_T3N14C_form__cexp_tLT2LN14C_form__cexp_tLN15C_form__cstmt_tR10Ast__loc_t(
   struct _fx_T3N14C_form__cexp_tLT2LN14C_form__cexp_tLN15C_form__cstmt_tR10Ast__loc_t* dst)
{
   _fx_free_N14C_form__cexp_t(&dst->t0);
   _fx_free_LT2LN14C_form__cexp_tLN15C_form__cstmt_t(&dst->t1);
}

static void _fx_copy_T3N14C_form__cexp_tLT2LN14C_form__cexp_tLN15C_form__cstmt_tR10Ast__loc_t(
   struct _fx_T3N14C_form__cexp_tLT2LN14C_form__cexp_tLN15C_form__cstmt_tR10Ast__loc_t* src,
   struct _fx_T3N14C_form__cexp_tLT2LN14C_form__cexp_tLN15C_form__cstmt_tR10Ast__loc_t* dst)
{
   FX_COPY_PTR(src->t0, &dst->t0);
   FX_COPY_PTR(src->t1, &dst->t1);
   dst->t2 = src->t2;
}

static void _fx_make_T3N14C_form__cexp_tLT2LN14C_form__cexp_tLN15C_form__cstmt_tR10Ast__loc_t(
   struct _fx_N14C_form__cexp_t_data_t* t0,
   struct _fx_LT2LN14C_form__cexp_tLN15C_form__cstmt_t_data_t* t1,
   struct _fx_R10Ast__loc_t* t2,
   struct _fx_T3N14C_form__cexp_tLT2LN14C_form__cexp_tLN15C_form__cstmt_tR10Ast__loc_t* fx_result)
{
   FX_COPY_PTR(t0, &fx_result->t0);
   FX_COPY_PTR(t1, &fx_result->t1);
   fx_result->t2 = *t2;
}

static void _fx_free_T4N14C_form__ctyp_tR9Ast__id_tNt6option1N14C_form__cexp_tR10Ast__loc_t(
   struct _fx_T4N14C_form__ctyp_tR9Ast__id_tNt6option1N14C_form__cexp_tR10Ast__loc_t* dst)
{
   _fx_free_N14C_form__ctyp_t(&dst->t0);
   _fx_free_Nt6option1N14C_form__cexp_t(&dst->t2);
}

static void _fx_copy_T4N14C_form__ctyp_tR9Ast__id_tNt6option1N14C_form__cexp_tR10Ast__loc_t(
   struct _fx_T4N14C_form__ctyp_tR9Ast__id_tNt6option1N14C_form__cexp_tR10Ast__loc_t* src,
   struct _fx_T4N14C_form__ctyp_tR9Ast__id_tNt6option1N14C_form__cexp_tR10Ast__loc_t* dst)
{
   FX_COPY_PTR(src->t0, &dst->t0);
   dst->t1 = src->t1;
   _fx_copy_Nt6option1N14C_form__cexp_t(&src->t2, &dst->t2);
   dst->t3 = src->t3;
}

static void _fx_make_T4N14C_form__ctyp_tR9Ast__id_tNt6option1N14C_form__cexp_tR10Ast__loc_t(
   struct _fx_N14C_form__ctyp_t_data_t* t0,
   struct _fx_R9Ast__id_t* t1,
   struct _fx_Nt6option1N14C_form__cexp_t* t2,
   struct _fx_R10Ast__loc_t* t3,
   struct _fx_T4N14C_form__ctyp_tR9Ast__id_tNt6option1N14C_form__cexp_tR10Ast__loc_t* fx_result)
{
   FX_COPY_PTR(t0, &fx_result->t0);
   fx_result->t1 = *t1;
   _fx_copy_Nt6option1N14C_form__cexp_t(t2, &fx_result->t2);
   fx_result->t3 = *t3;
}

static void _fx_free_T2N14C_form__cexp_tLN15C_form__cstmt_t(struct _fx_T2N14C_form__cexp_tLN15C_form__cstmt_t* dst)
{
   _fx_free_N14C_form__cexp_t(&dst->t0);
   _fx_free_LN15C_form__cstmt_t(&dst->t1);
}

static void _fx_copy_T2N14C_form__cexp_tLN15C_form__cstmt_t(
   struct _fx_T2N14C_form__cexp_tLN15C_form__cstmt_t* src,
   struct _fx_T2N14C_form__cexp_tLN15C_form__cstmt_t* dst)
{
   FX_COPY_PTR(src->t0, &dst->t0);
   FX_COPY_PTR(src->t1, &dst->t1);
}

static void _fx_make_T2N14C_form__cexp_tLN15C_form__cstmt_t(
   struct _fx_N14C_form__cexp_t_data_t* t0,
   struct _fx_LN15C_form__cstmt_t_data_t* t1,
   struct _fx_T2N14C_form__cexp_tLN15C_form__cstmt_t* fx_result)
{
   FX_COPY_PTR(t0, &fx_result->t0);
   FX_COPY_PTR(t1, &fx_result->t1);
}

static void _fx_free_LT2N14C_form__cexp_tLN15C_form__cstmt_t(struct _fx_LT2N14C_form__cexp_tLN15C_form__cstmt_t_data_t** dst)
{
   FX_FREE_LIST_IMPL(_fx_LT2N14C_form__cexp_tLN15C_form__cstmt_t, _fx_free_T2N14C_form__cexp_tLN15C_form__cstmt_t);
}

static int _fx_cons_LT2N14C_form__cexp_tLN15C_form__cstmt_t(
   struct _fx_T2N14C_form__cexp_tLN15C_form__cstmt_t* hd,
   struct _fx_LT2N14C_form__cexp_tLN15C_form__cstmt_t_data_t* tl,
   bool addref_tl,
   struct _fx_LT2N14C_form__cexp_tLN15C_form__cstmt_t_data_t** fx_result)
{
   FX_MAKE_LIST_IMPL(_fx_LT2N14C_form__cexp_tLN15C_form__cstmt_t, _fx_copy_T2N14C_form__cexp_tLN15C_form__cstmt_t);
}

static void _fx_free_T3LT2N14C_form__cexp_tLN15C_form__cstmt_tLN15C_form__cstmt_tR10Ast__loc_t(
   struct _fx_T3LT2N14C_form__cexp_tLN15C_form__cstmt_tLN15C_form__cstmt_tR10Ast__loc_t* dst)
{
   _fx_free_LT2N14C_form__cexp_tLN15C_form__cstmt_t(&dst->t0);
   _fx_free_LN15C_form__cstmt_t(&dst->t1);
}

static void _fx_copy_T3LT2N14C_form__cexp_tLN15C_form__cstmt_tLN15C_form__cstmt_tR10Ast__loc_t(
   struct _fx_T3LT2N14C_form__cexp_tLN15C_form__cstmt_tLN15C_form__cstmt_tR10Ast__loc_t* src,
   struct _fx_T3LT2N14C_form__cexp_tLN15C_form__cstmt_tLN15C_form__cstmt_tR10Ast__loc_t* dst)
{
   FX_COPY_PTR(src->t0, &dst->t0);
   FX_COPY_PTR(src->t1, &dst->t1);
   dst->t2 = src->t2;
}

static void _fx_make_T3LT2N14C_form__cexp_tLN15C_form__cstmt_tLN15C_form__cstmt_tR10Ast__loc_t(
   struct _fx_LT2N14C_form__cexp_tLN15C_form__cstmt_t_data_t* t0,
   struct _fx_LN15C_form__cstmt_t_data_t* t1,
   struct _fx_R10Ast__loc_t* t2,
   struct _fx_T3LT2N14C_form__cexp_tLN15C_form__cstmt_tLN15C_form__cstmt_tR10Ast__loc_t* fx_result)
{
   FX_COPY_PTR(t0, &fx_result->t0);
   FX_COPY_PTR(t1, &fx_result->t1);
   fx_result->t2 = *t2;
}

static void _fx_free_N15C_form__cstmt_t(struct _fx_N15C_form__cstmt_t_data_t** dst)
{
   if (*dst && FX_DECREF((*dst)->rc) == 1) {
      switch ((*dst)->tag) {
      case 2:
         _fx_free_T2SR10Ast__loc_t(&(*dst)->u.CComment); break;
      case 3:
         _fx_free_N14C_form__cexp_t(&(*dst)->u.CExp); break;
      case 6:
         _fx_free_T2Nt6option1N14C_form__cexp_tR10Ast__loc_t(&(*dst)->u.CStmtReturn); break;
      case 7:
         _fx_free_T2LN15C_form__cstmt_tR10Ast__loc_t(&(*dst)->u.CStmtBlock); break;
      case 8:
         _fx_free_T2R9Ast__id_tN15C_form__cstmt_t(&(*dst)->u.CStmtSync); break;
      case 9:
         _fx_free_T4N14C_form__cexp_tN15C_form__cstmt_tN15C_form__cstmt_tR10Ast__loc_t(&(*dst)->u.CStmtIf); break;
      case 12:
         _fx_free_T6Nt6option1N14C_form__ctyp_tLN14C_form__cexp_tNt6option1N14C_form__cexp_tLN14C_form__cexp_tN15C_form__cstmt_tR10Ast__loc_t(
            &(*dst)->u.CStmtFor);
         break;
      case 13:
         _fx_free_T3N14C_form__cexp_tN15C_form__cstmt_tR10Ast__loc_t(&(*dst)->u.CStmtWhile); break;
      case 14:
         _fx_free_T3N15C_form__cstmt_tN14C_form__cexp_tR10Ast__loc_t(&(*dst)->u.CStmtDoWhile); break;
      case 15:
         _fx_free_T3N14C_form__cexp_tLT2LN14C_form__cexp_tLN15C_form__cstmt_tR10Ast__loc_t(&(*dst)->u.CStmtSwitch); break;
      case 16:
         _fx_free_T4N14C_form__ctyp_tR9Ast__id_tNt6option1N14C_form__cexp_tR10Ast__loc_t(&(*dst)->u.CDefVal); break;
      case 17:
         _fx_free_rR17C_form__cdeffun_t(&(*dst)->u.CDefFun); break;
      case 18:
         _fx_free_rR17C_form__cdeftyp_t(&(*dst)->u.CDefTyp); break;
      case 21:
         _fx_free_rR18C_form__cdefenum_t(&(*dst)->u.CDefEnum); break;
      case 22:
         _fx_free_rR23C_form__cdefinterface_t(&(*dst)->u.CDefInterface); break;
      case 23:
         _fx_free_rR19C_form__cdefmacro_t(&(*dst)->u.CMacroDef); break;
      case 25:
         _fx_free_T3LT2N14C_form__cexp_tLN15C_form__cstmt_tLN15C_form__cstmt_tR10Ast__loc_t(&(*dst)->u.CMacroIf); break;
      case 26:
         _fx_free_T2SR10Ast__loc_t(&(*dst)->u.CMacroInclude); break;
      case 27:
         _fx_free_T2SR10Ast__loc_t(&(*dst)->u.CMacroPragma); break;
      default:
         ;
      }
      fx_free(*dst);
   }
   *dst = 0;
}

static void _fx_free_T3SiN13C_pp__assoc_t(struct _fx_T3SiN13C_pp__assoc_t* dst)
{
   fx_free_str(&dst->t0);
}

static void _fx_copy_T3SiN13C_pp__assoc_t(struct _fx_T3SiN13C_pp__assoc_t* src, struct _fx_T3SiN13C_pp__assoc_t* dst)
{
   fx_copy_str(&src->t0, &dst->t0);
   dst->t1 = src->t1;
   dst->t2 = src->t2;
}

static void _fx_make_T3SiN13C_pp__assoc_t(
   fx_str_t* t0,
   int_ t1,
   struct _fx_N13C_pp__assoc_t* t2,
   struct _fx_T3SiN13C_pp__assoc_t* fx_result)
{
   fx_copy_str(t0, &fx_result->t0);
   fx_result->t1 = t1;
   fx_result->t2 = *t2;
}

_fx_Nt6option1R9Ast__id_t _fx_g10C_pp__None = { 1 };
_fx_N19C_form__ctyp_attr_t _fx_g15C_pp__CTypConst = { 1 };
_fx_N19C_form__ctyp_attr_t _fx_g18C_pp__CTypVolatile = { 2 };
_fx_N19C_form__ctyp_attr_t _fx_g16C_pp__CTypStatic = { 3 };
_fx_N13C_pp__assoc_t _fx_g15C_pp__AssocLeft = { 1 };
_fx_N13C_pp__assoc_t _fx_g16C_pp__AssocRight = { 2 };
FX_EXTERN_C int _fx_M3AstFM6__eq__B2RM4id_tRM4id_t(
   struct _fx_R9Ast__id_t* a_0,
   struct _fx_R9Ast__id_t* b_0,
   bool* fx_result,
   void* fx_fv);

FX_EXTERN_C int _fx_M6C_formFM7idc2strS2R9Ast__id_tR10Ast__loc_t(
   struct _fx_R9Ast__id_t* n_0,
   struct _fx_R10Ast__loc_t* loc_0,
   fx_str_t* fx_result,
   void* fx_fv);

FX_EXTERN_C int _fx_M2PPFM3strv2RM1tS(struct _fx_R5PP__t* pp_0, fx_str_t* s_0, void* fx_fv);

FX_EXTERN_C int _fx_M2PPFM5beginv1RM1t(struct _fx_R5PP__t* pp_0, void* fx_fv);

FX_EXTERN_C int _fx_M6C_formFM9ctyp2str_S2N14C_form__ctyp_tR10Ast__loc_t(
   struct _fx_N14C_form__ctyp_t_data_t* t_0,
   struct _fx_R10Ast__loc_t* loc_0,
   fx_str_t* fx_result,
   void* fx_fv);

static int _fx_M4C_ppFM9pr_id_optv3Nt6option1R9Ast__id_tR10Ast__loc_tR5PP__t(
   struct _fx_Nt6option1R9Ast__id_t* id_opt_0,
   struct _fx_R10Ast__loc_t* loc_0,
   struct _fx_R5PP__t* pp_0,
   void* fx_fv);

FX_EXTERN_C int _fx_M3AstFM11compile_errE2RM5loc_tS(
   struct _fx_R10Ast__loc_t* loc_0,
   fx_str_t* msg_0,
   fx_exn_t* fx_result,
   void* fx_fv);

FX_EXTERN_C int _fx_M2PPFM5spacev1RM1t(struct _fx_R5PP__t* pp_0, void* fx_fv);

static int _fx_M4C_ppFM10pr_id_opt_v4BNt6option1R9Ast__id_tR10Ast__loc_tR5PP__t(
   bool add_space_0,
   struct _fx_Nt6option1R9Ast__id_t* id_opt_0,
   struct _fx_R10Ast__loc_t* loc_0,
   struct _fx_R5PP__t* pp_0,
   void* fx_fv);

FX_EXTERN_C int _fx_M2PPFM3cutv1RM1t(struct _fx_R5PP__t* pp_0, void* fx_fv);

FX_EXTERN_C int _fx_M2PPFM3endv1RM1t(struct _fx_R5PP__t* pp_0, void* fx_fv);

static int
   _fx_M4C_ppFM9pr_structv7SNt6option1R9Ast__id_tLT2R9Ast__id_tN14C_form__ctyp_tSNt6option1R9Ast__id_tR10Ast__loc_tR5PP__t(
   fx_str_t* prefix_0,
   struct _fx_Nt6option1R9Ast__id_t* n_opt_0,
   struct _fx_LT2R9Ast__id_tN14C_form__ctyp_t_data_t* elems_0,
   fx_str_t* suffix_0,
   struct _fx_Nt6option1R9Ast__id_t* id_opt_0,
   struct _fx_R10Ast__loc_t* loc_0,
   struct _fx_R5PP__t* pp_0,
   void* fx_fv);

FX_EXTERN_C int _fx_M6C_formFM6cinfo_N15C_form__cinfo_t2R9Ast__id_tR10Ast__loc_t(
   struct _fx_R9Ast__id_t* i_0,
   struct _fx_R10Ast__loc_t* loc_0,
   struct _fx_N15C_form__cinfo_t* fx_result,
   void* fx_fv);

FX_EXTERN_C int _fx_M2PPFM7newlinev1RM1t(struct _fx_R5PP__t* pp_0, void* fx_fv);

FX_EXTERN_C int _fx_M2PPFM8newlineuv1RM1t(struct _fx_R5PP__t* pp_0, void* fx_fv);

FX_EXTERN_C int _fx_F3ordi1C(char_ c_0, int_* fx_result, void* fx_fv);

FX_EXTERN_C int _fx_F6stringS1i(int_ a, fx_str_t* fx_result, void* fx_fv);

FX_EXTERN_C int _fx_M6StringFM5splitLS3SCB(
   fx_str_t* s_0,
   char_ c_0,
   bool allow_empty_0,
   struct _fx_LS_data_t** fx_result,
   void* fx_fv);

FX_EXTERN_C int _fx_M6StringFM7escapedS2SB(fx_str_t* s_0, bool quotes_0, fx_str_t* fx_result, void* fx_fv);

FX_EXTERN_C bool _fx_M6StringFM8endswithB2SC(fx_str_t* s, char_ suffix, void* fx_fv);

FX_EXTERN_C void _fx_M6K_formFM9KLitFloatN14K_form__klit_t2id(int_ arg0, double arg1, struct _fx_N14K_form__klit_t* fx_result);

FX_EXTERN_C int _fx_M6K_formFM8klit2strS3N14K_form__klit_tBR10Ast__loc_t(
   struct _fx_N14K_form__klit_t* lit_0,
   bool cmode_0,
   struct _fx_R10Ast__loc_t* loc_0,
   fx_str_t* fx_result,
   void* fx_fv);

FX_EXTERN_C int _fx_M4C_ppFM8pp_elistv2R5PP__tLN14C_form__cexp_t(
   struct _fx_R5PP__t* pp_0,
   struct _fx_LN14C_form__cexp_t_data_t* el_0,
   void* fx_fv);

FX_EXTERN_C int _fx_M6StringFM5stripS1S(fx_str_t* s, fx_str_t* fx_result, void* fx_fv);

FX_EXTERN_C int _fx_M2PPFM6beginvv1RM1t(struct _fx_R5PP__t* pp_0, void* fx_fv);

FX_EXTERN_C int _fx_M2PPFM6break0v1RM1t(struct _fx_R5PP__t* pp_0, void* fx_fv);

FX_EXTERN_C int _fx_M2PPFM6beginvv2RM1ti(struct _fx_R5PP__t* pp_0, int_ indent_0, void* fx_fv);

FX_EXTERN_C int _fx_M4C_ppFM9pp_cstmt_v2R5PP__tN15C_form__cstmt_t(
   struct _fx_R5PP__t* pp_0,
   struct _fx_N15C_form__cstmt_t_data_t* s_0,
   void* fx_fv);

FX_EXTERN_C_VAL(struct _fx_R18Options__options_t _fx_g12Options__opt)
FX_EXTERN_C_VAL(struct _fx_R9Ast__id_t _fx_g9Ast__noid)
FX_EXTERN_C int _fx_M3AstFM2ppS1RM4id_t(struct _fx_R9Ast__id_t* i_0, fx_str_t* fx_result, void* fx_fv);

FX_EXTERN_C int _fx_M6StringFM7replaceS3SSS(
   fx_str_t* s,
   fx_str_t* substr,
   fx_str_t* new_substr,
   fx_str_t* fx_result,
   void* fx_fv);

static int _fx_M4C_ppFM16print_cascade_ifv5SN14C_form__cexp_tN15C_form__cstmt_tN15C_form__cstmt_tR5PP__t(
   fx_str_t* prefix_0,
   struct _fx_N14C_form__cexp_t_data_t* e_0,
   struct _fx_N15C_form__cstmt_t_data_t* s1_0,
   struct _fx_N15C_form__cstmt_t_data_t* s2_0,
   struct _fx_R5PP__t* pp_0,
   void* fx_fv);

FX_EXTERN_C int _fx_M2PPFM6breakuv1RM1t(struct _fx_R5PP__t* pp_0, void* fx_fv);

FX_EXTERN_C int _fx_F7__mul__S2Ci(char_ c, int_ n, fx_str_t* fx_result, void* fx_fv);

FX_EXTERN_C int _fx_M6C_formFM13get_idc_cnameS2R9Ast__id_tR10Ast__loc_t(
   struct _fx_R9Ast__id_t* i_0,
   struct _fx_R10Ast__loc_t* loc_0,
   fx_str_t* fx_result,
   void* fx_fv);

FX_EXTERN_C int _fx_M2PPFM21pprint_to_string_listRM1t2ii(
   int_ margin_0,
   int_ default_indent_0,
   struct _fx_R5PP__t* fx_result,
   void* fx_fv);

FX_EXTERN_C int _fx_M2PPFM5flushv1RM1t(struct _fx_R5PP__t* pp_0, void* fx_fv);

FX_EXTERN_C int _fx_F12join_embraceS4SSSLS(
   fx_str_t* begin_0,
   fx_str_t* end_0,
   fx_str_t* sep_0,
   struct _fx_LS_data_t* strs_0,
   fx_str_t* fx_result,
   void* fx_fv);

FX_EXTERN_C void _fx_M4C_ppFM4SomeNt6option1R9Ast__id_t1R9Ast__id_t(
   struct _fx_R9Ast__id_t* arg0,
   struct _fx_Nt6option1R9Ast__id_t* fx_result)
{
   fx_result->tag = 2;
   fx_result->u.Some = *arg0;
}

FX_EXTERN_C int _fx_M4C_ppFM6__ne__B2N17C_form__cbinary_tN17C_form__cbinary_t(
   struct _fx_N17C_form__cbinary_t* a_0,
   struct _fx_N17C_form__cbinary_t* b_0,
   bool* fx_result,
   void* fx_fv)
{
   int fx_status = 0;
   bool res_0;
   if (b_0->tag == 13) {
      if (a_0->tag == 13) {
         res_0 = a_0->u.COpCmp.tag == b_0->u.COpCmp.tag; goto _fx_endmatch_0;
      }
   }
   res_0 = a_0->tag == b_0->tag;

_fx_endmatch_0: ;
   FX_CHECK_EXN(_fx_cleanup);
   *fx_result = !res_0;

_fx_cleanup: ;
   return fx_status;
}

FX_EXTERN_C int _fx_M4C_ppFM6__ne__B2R9Ast__id_tR9Ast__id_t(
   struct _fx_R9Ast__id_t* a_0,
   struct _fx_R9Ast__id_t* b_0,
   bool* fx_result,
   void* fx_fv)
{
   int fx_status = 0;
   bool res_0;
   FX_CALL(_fx_M3AstFM6__eq__B2RM4id_tRM4id_t(a_0, b_0, &res_0, 0), _fx_cleanup);
   *fx_result = !res_0;

_fx_cleanup: ;
   return fx_status;
}

FX_EXTERN_C int_ _fx_M4C_ppFM6lengthi1LN15C_form__cstmt_t(struct _fx_LN15C_form__cstmt_t_data_t* l, void* fx_fv)
{
   
return fx_list_length(l);

}

FX_EXTERN_C int_ _fx_M4C_ppFM6lengthi1LT3R9Ast__id_tN14C_form__ctyp_tLN19C_form__carg_attr_t(
   struct _fx_LT3R9Ast__id_tN14C_form__ctyp_tLN19C_form__carg_attr_t_data_t* l,
   void* fx_fv)
{
   
return fx_list_length(l);

}

FX_EXTERN_C int_ _fx_M4C_ppFM6lengthi1LN14C_form__ctyp_t(struct _fx_LN14C_form__ctyp_t_data_t* l, void* fx_fv)
{
   
return fx_list_length(l);

}

FX_EXTERN_C int_ _fx_M4C_ppFM6lengthi1LS(struct _fx_LS_data_t* l, void* fx_fv)
{
   
return fx_list_length(l);

}

FX_EXTERN_C int _fx_M4C_ppFM6stringS1S(fx_str_t* a_0, fx_str_t* fx_result, void* fx_fv)
{
   int fx_status = 0;
   fx_copy_str(a_0, fx_result);
   return fx_status;
}

FX_EXTERN_C int _fx_M4C_ppFM8length1_i1LN15C_form__cstmt_t(
   struct _fx_LN15C_form__cstmt_t_data_t* l_0,
   int_* fx_result,
   void* fx_fv)
{
   int fx_status = 0;
   *fx_result = _fx_M4C_ppFM6lengthi1LN15C_form__cstmt_t(l_0, 0);
   return fx_status;
}

FX_EXTERN_C int _fx_M4C_ppFM8length1_i1LN14C_form__ctyp_t(
   struct _fx_LN14C_form__ctyp_t_data_t* l_0,
   int_* fx_result,
   void* fx_fv)
{
   int fx_status = 0;
   *fx_result = _fx_M4C_ppFM6lengthi1LN14C_form__ctyp_t(l_0, 0);
   return fx_status;
}

FX_EXTERN_C int _fx_M4C_ppFM8length1_i1LS(struct _fx_LS_data_t* l_0, int_* fx_result, void* fx_fv)
{
   int fx_status = 0;
   *fx_result = _fx_M4C_ppFM6lengthi1LS(l_0, 0);
   return fx_status;
}

FX_EXTERN_C int _fx_M4C_ppFM3memB2LN19C_form__ctyp_attr_tN19C_form__ctyp_attr_t(
   struct _fx_LN19C_form__ctyp_attr_t_data_t* l_0,
   struct _fx_N19C_form__ctyp_attr_t* a_0,
   bool* fx_result,
   void* fx_fv)
{
   int fx_status = 0;
   bool __fold_result___0 = false;
   _fx_LN19C_form__ctyp_attr_t lst_0 = l_0;
   for (; lst_0; lst_0 = lst_0->tl) {
      _fx_N19C_form__ctyp_attr_t* b_0 = &lst_0->hd;
      if (a_0->tag == b_0->tag) {
         __fold_result___0 = true; FX_BREAK(_fx_catch_0);
      }

   _fx_catch_0: ;
      FX_CHECK_BREAK();
      FX_CHECK_EXN(_fx_cleanup);
   }
   *fx_result = __fold_result___0;

_fx_cleanup: ;
   return fx_status;
}

FX_EXTERN_C int _fx_M4C_ppFM10binop2str_T3SiN13C_pp__assoc_t1N17C_form__cbinary_t(
   struct _fx_N17C_form__cbinary_t* bop_0,
   struct _fx_T3SiN13C_pp__assoc_t* fx_result,
   void* fx_fv)
{
   int fx_status = 0;
   int tag_0 = bop_0->tag;
   if (tag_0 == 14) {
      fx_str_t slit_0 = FX_MAKE_STR("");
      _fx_make_T3SiN13C_pp__assoc_t(&slit_0, 1400, &_fx_g15C_pp__AssocLeft, fx_result);
      goto _fx_endmatch_0;
   }
   if (tag_0 == 3) {
      fx_str_t slit_1 = FX_MAKE_STR("*");
      _fx_make_T3SiN13C_pp__assoc_t(&slit_1, 1200, &_fx_g15C_pp__AssocLeft, fx_result);
      goto _fx_endmatch_0;
   }
   if (tag_0 == 4) {
      fx_str_t slit_2 = FX_MAKE_STR("/");
      _fx_make_T3SiN13C_pp__assoc_t(&slit_2, 1200, &_fx_g15C_pp__AssocLeft, fx_result);
      goto _fx_endmatch_0;
   }
   if (tag_0 == 5) {
      fx_str_t slit_3 = FX_MAKE_STR("%");
      _fx_make_T3SiN13C_pp__assoc_t(&slit_3, 1200, &_fx_g15C_pp__AssocLeft, fx_result);
      goto _fx_endmatch_0;
   }
   if (tag_0 == 1) {
      fx_str_t slit_4 = FX_MAKE_STR("+");
      _fx_make_T3SiN13C_pp__assoc_t(&slit_4, 1100, &_fx_g15C_pp__AssocLeft, fx_result);
      goto _fx_endmatch_0;
   }
   if (tag_0 == 2) {
      fx_str_t slit_5 = FX_MAKE_STR("-");
      _fx_make_T3SiN13C_pp__assoc_t(&slit_5, 1100, &_fx_g15C_pp__AssocLeft, fx_result);
      goto _fx_endmatch_0;
   }
   if (tag_0 == 6) {
      fx_str_t slit_6 = FX_MAKE_STR("<<");
      _fx_make_T3SiN13C_pp__assoc_t(&slit_6, 1000, &_fx_g15C_pp__AssocLeft, fx_result);
      goto _fx_endmatch_0;
   }
   if (tag_0 == 7) {
      fx_str_t slit_7 = FX_MAKE_STR(">>");
      _fx_make_T3SiN13C_pp__assoc_t(&slit_7, 1000, &_fx_g15C_pp__AssocLeft, fx_result);
      goto _fx_endmatch_0;
   }
   if (tag_0 == 13) {
      if (bop_0->u.COpCmp.tag == 3) {
         fx_str_t slit_8 = FX_MAKE_STR("<");
         _fx_make_T3SiN13C_pp__assoc_t(&slit_8, 900, &_fx_g15C_pp__AssocLeft, fx_result);
         goto _fx_endmatch_0;
      }
   }
   if (tag_0 == 13) {
      if (bop_0->u.COpCmp.tag == 4) {
         fx_str_t slit_9 = FX_MAKE_STR("<=");
         _fx_make_T3SiN13C_pp__assoc_t(&slit_9, 900, &_fx_g15C_pp__AssocLeft, fx_result);
         goto _fx_endmatch_0;
      }
   }
   if (tag_0 == 13) {
      if (bop_0->u.COpCmp.tag == 6) {
         fx_str_t slit_10 = FX_MAKE_STR(">");
         _fx_make_T3SiN13C_pp__assoc_t(&slit_10, 900, &_fx_g15C_pp__AssocLeft, fx_result);
         goto _fx_endmatch_0;
      }
   }
   if (tag_0 == 13) {
      if (bop_0->u.COpCmp.tag == 5) {
         fx_str_t slit_11 = FX_MAKE_STR(">=");
         _fx_make_T3SiN13C_pp__assoc_t(&slit_11, 900, &_fx_g15C_pp__AssocLeft, fx_result);
         goto _fx_endmatch_0;
      }
   }
   if (tag_0 == 13) {
      if (bop_0->u.COpCmp.tag == 1) {
         fx_str_t slit_12 = FX_MAKE_STR("==");
         _fx_make_T3SiN13C_pp__assoc_t(&slit_12, 800, &_fx_g15C_pp__AssocLeft, fx_result);
         goto _fx_endmatch_0;
      }
   }
   if (tag_0 == 13) {
      if (bop_0->u.COpCmp.tag == 2) {
         fx_str_t slit_13 = FX_MAKE_STR("!=");
         _fx_make_T3SiN13C_pp__assoc_t(&slit_13, 800, &_fx_g15C_pp__AssocLeft, fx_result);
         goto _fx_endmatch_0;
      }
   }
   if (tag_0 == 8) {
      fx_str_t slit_14 = FX_MAKE_STR("&");
      _fx_make_T3SiN13C_pp__assoc_t(&slit_14, 700, &_fx_g15C_pp__AssocLeft, fx_result);
      goto _fx_endmatch_0;
   }
   if (tag_0 == 10) {
      fx_str_t slit_15 = FX_MAKE_STR("^");
      _fx_make_T3SiN13C_pp__assoc_t(&slit_15, 600, &_fx_g15C_pp__AssocLeft, fx_result);
      goto _fx_endmatch_0;
   }
   if (tag_0 == 9) {
      fx_str_t slit_16 = FX_MAKE_STR("|");
      _fx_make_T3SiN13C_pp__assoc_t(&slit_16, 500, &_fx_g15C_pp__AssocLeft, fx_result);
      goto _fx_endmatch_0;
   }
   if (tag_0 == 11) {
      fx_str_t slit_17 = FX_MAKE_STR("&&");
      _fx_make_T3SiN13C_pp__assoc_t(&slit_17, 400, &_fx_g15C_pp__AssocLeft, fx_result);
      goto _fx_endmatch_0;
   }
   if (tag_0 == 12) {
      fx_str_t slit_18 = FX_MAKE_STR("||");
      _fx_make_T3SiN13C_pp__assoc_t(&slit_18, 300, &_fx_g15C_pp__AssocLeft, fx_result);
      goto _fx_endmatch_0;
   }
   if (tag_0 == 15) {
      fx_str_t slit_19 = FX_MAKE_STR("=");
      _fx_make_T3SiN13C_pp__assoc_t(&slit_19, 100, &_fx_g16C_pp__AssocRight, fx_result);
      goto _fx_endmatch_0;
   }
   if (tag_0 == 16) {
      fx_str_t slit_20 = FX_MAKE_STR("+=");
      _fx_make_T3SiN13C_pp__assoc_t(&slit_20, 100, &_fx_g16C_pp__AssocRight, fx_result);
      goto _fx_endmatch_0;
   }
   if (tag_0 == 17) {
      fx_str_t slit_21 = FX_MAKE_STR("-=");
      _fx_make_T3SiN13C_pp__assoc_t(&slit_21, 100, &_fx_g16C_pp__AssocRight, fx_result);
      goto _fx_endmatch_0;
   }
   if (tag_0 == 18) {
      fx_str_t slit_22 = FX_MAKE_STR("*=");
      _fx_make_T3SiN13C_pp__assoc_t(&slit_22, 100, &_fx_g16C_pp__AssocRight, fx_result);
      goto _fx_endmatch_0;
   }
   if (tag_0 == 19) {
      fx_str_t slit_23 = FX_MAKE_STR("/=");
      _fx_make_T3SiN13C_pp__assoc_t(&slit_23, 100, &_fx_g16C_pp__AssocRight, fx_result);
      goto _fx_endmatch_0;
   }
   if (tag_0 == 20) {
      fx_str_t slit_24 = FX_MAKE_STR("%=");
      _fx_make_T3SiN13C_pp__assoc_t(&slit_24, 100, &_fx_g16C_pp__AssocRight, fx_result);
      goto _fx_endmatch_0;
   }
   if (tag_0 == 21) {
      fx_str_t slit_25 = FX_MAKE_STR("<<=");
      _fx_make_T3SiN13C_pp__assoc_t(&slit_25, 100, &_fx_g16C_pp__AssocRight, fx_result);
      goto _fx_endmatch_0;
   }
   if (tag_0 == 22) {
      fx_str_t slit_26 = FX_MAKE_STR(">>=");
      _fx_make_T3SiN13C_pp__assoc_t(&slit_26, 100, &_fx_g16C_pp__AssocRight, fx_result);
      goto _fx_endmatch_0;
   }
   if (tag_0 == 23) {
      fx_str_t slit_27 = FX_MAKE_STR("&=");
      _fx_make_T3SiN13C_pp__assoc_t(&slit_27, 100, &_fx_g16C_pp__AssocRight, fx_result);
      goto _fx_endmatch_0;
   }
   if (tag_0 == 24) {
      fx_str_t slit_28 = FX_MAKE_STR("|=");
      _fx_make_T3SiN13C_pp__assoc_t(&slit_28, 100, &_fx_g16C_pp__AssocRight, fx_result);
      goto _fx_endmatch_0;
   }
   if (tag_0 == 25) {
      fx_str_t slit_29 = FX_MAKE_STR("^=");
      _fx_make_T3SiN13C_pp__assoc_t(&slit_29, 100, &_fx_g16C_pp__AssocRight, fx_result);
      goto _fx_endmatch_0;
   }
   FX_FAST_THROW(FX_EXN_NoMatchError, _fx_cleanup);

_fx_endmatch_0: ;

_fx_cleanup: ;
   return fx_status;
}

FX_EXTERN_C int _fx_M4C_ppFM9unop2str_T3SiN13C_pp__assoc_t1N16C_form__cunary_t(
   struct _fx_N16C_form__cunary_t* uop_0,
   struct _fx_T3SiN13C_pp__assoc_t* fx_result,
   void* fx_fv)
{
   int fx_status = 0;
   int tag_0 = uop_0->tag;
   if (tag_0 == 1) {
      fx_str_t slit_0 = FX_MAKE_STR("+"); _fx_make_T3SiN13C_pp__assoc_t(&slit_0, 1300, &_fx_g16C_pp__AssocRight, fx_result);
   }
   else if (tag_0 == 2) {
      fx_str_t slit_1 = FX_MAKE_STR("-"); _fx_make_T3SiN13C_pp__assoc_t(&slit_1, 1300, &_fx_g16C_pp__AssocRight, fx_result);
   }
   else if (tag_0 == 3) {
      fx_str_t slit_2 = FX_MAKE_STR("~"); _fx_make_T3SiN13C_pp__assoc_t(&slit_2, 1300, &_fx_g16C_pp__AssocRight, fx_result);
   }
   else if (tag_0 == 4) {
      fx_str_t slit_3 = FX_MAKE_STR("!"); _fx_make_T3SiN13C_pp__assoc_t(&slit_3, 1300, &_fx_g16C_pp__AssocRight, fx_result);
   }
   else if (tag_0 == 5) {
      fx_str_t slit_4 = FX_MAKE_STR("*"); _fx_make_T3SiN13C_pp__assoc_t(&slit_4, 1300, &_fx_g16C_pp__AssocRight, fx_result);
   }
   else if (tag_0 == 6) {
      fx_str_t slit_5 = FX_MAKE_STR("&"); _fx_make_T3SiN13C_pp__assoc_t(&slit_5, 1300, &_fx_g16C_pp__AssocRight, fx_result);
   }
   else if (tag_0 == 7) {
      fx_str_t slit_6 = FX_MAKE_STR("++"); _fx_make_T3SiN13C_pp__assoc_t(&slit_6, 1300, &_fx_g16C_pp__AssocRight, fx_result);
   }
   else if (tag_0 == 8) {
      fx_str_t slit_7 = FX_MAKE_STR("--"); _fx_make_T3SiN13C_pp__assoc_t(&slit_7, 1300, &_fx_g16C_pp__AssocRight, fx_result);
   }
   else if (tag_0 == 9) {
      fx_str_t slit_8 = FX_MAKE_STR("++"); _fx_make_T3SiN13C_pp__assoc_t(&slit_8, 1400, &_fx_g15C_pp__AssocLeft, fx_result);
   }
   else if (tag_0 == 10) {
      fx_str_t slit_9 = FX_MAKE_STR("--"); _fx_make_T3SiN13C_pp__assoc_t(&slit_9, 1400, &_fx_g15C_pp__AssocLeft, fx_result);
   }
   else {
      FX_FAST_THROW(FX_EXN_NoMatchError, _fx_cleanup);
   }

_fx_cleanup: ;
   return fx_status;
}

FX_EXTERN_C int _fx_M4C_ppFM5pp_idv3R5PP__tR9Ast__id_tR10Ast__loc_t(
   struct _fx_R5PP__t* pp_0,
   struct _fx_R9Ast__id_t* n_0,
   struct _fx_R10Ast__loc_t* loc_0,
   void* fx_fv)
{
   fx_str_t v_0 = {0};
   int fx_status = 0;
   FX_CALL(_fx_M6C_formFM7idc2strS2R9Ast__id_tR10Ast__loc_t(n_0, loc_0, &v_0, 0), _fx_cleanup);
   FX_CALL(_fx_M2PPFM3strv2RM1tS(pp_0, &v_0, 0), _fx_cleanup);

_fx_cleanup: ;
   FX_FREE_STR(&v_0);
   return fx_status;
}

FX_EXTERN_C int _fx_M4C_ppFM9pp_ctyp__v7R5PP__tSSN14C_form__ctyp_tNt6option1R9Ast__id_tBR10Ast__loc_t(
   struct _fx_R5PP__t* pp_0,
   fx_str_t* prefix0_0,
   fx_str_t* suffix0_0,
   struct _fx_N14C_form__ctyp_t_data_t* t_0,
   struct _fx_Nt6option1R9Ast__id_t* id_opt_0,
   bool fwd_mode_0,
   struct _fx_R10Ast__loc_t* loc_0,
   void* fx_fv)
{
   int fx_status = 0;
   FX_CALL(fx_check_stack(), _fx_cleanup);
   FX_CALL(_fx_M2PPFM5beginv1RM1t(pp_0, 0), _fx_cleanup);
   int tag_0 = FX_REC_VARIANT_TAG(t_0);
   bool res_0;
   if (tag_0 == 1) {
      res_0 = true;
   }
   else if (tag_0 == 6) {
      res_0 = true;
   }
   else if (tag_0 == 2) {
      res_0 = true;
   }
   else if (tag_0 == 3) {
      res_0 = true;
   }
   else if (tag_0 == 4) {
      res_0 = true;
   }
   else if (tag_0 == 5) {
      res_0 = true;
   }
   else if (tag_0 == 7) {
      res_0 = true;
   }
   else if (tag_0 == 12) {
      res_0 = true;
   }
   else if (tag_0 == 10) {
      res_0 = true;
   }
   else if (tag_0 == 9) {
      res_0 = true;
   }
   else if (tag_0 == 13) {
      res_0 = true;
   }
   else if (tag_0 == 11) {
      res_0 = true;
   }
   else if (tag_0 == 19) {
      res_0 = true;
   }
   else if (tag_0 == 20) {
      res_0 = true;
   }
   else {
      res_0 = false;
   }
   FX_CHECK_EXN(_fx_cleanup);
   if (res_0) {
      fx_str_t v_0 = {0};
      FX_CALL(_fx_M6C_formFM9ctyp2str_S2N14C_form__ctyp_tR10Ast__loc_t(t_0, loc_0, &v_0, 0), _fx_catch_0);
      FX_CALL(_fx_M2PPFM3strv2RM1tS(pp_0, &v_0, 0), _fx_catch_0);
      FX_CALL(_fx_M4C_ppFM9pr_id_optv3Nt6option1R9Ast__id_tR10Ast__loc_tR5PP__t(id_opt_0, loc_0, pp_0, 0), _fx_catch_0);

   _fx_catch_0: ;
      FX_FREE_STR(&v_0);
      goto _fx_endmatch_3;
   }
   if (tag_0 == 8) {
      fx_str_t slit_0 = FX_MAKE_STR("void");
      FX_CALL(_fx_M2PPFM3strv2RM1tS(pp_0, &slit_0, 0), _fx_catch_2);
      if (id_opt_0->tag == 2) {
         fx_str_t v_1 = {0};
         fx_str_t v_2 = {0};
         fx_str_t v_3 = {0};
         fx_exn_t v_4 = {0};
         FX_CALL(_fx_M6C_formFM7idc2strS2R9Ast__id_tR10Ast__loc_t(&id_opt_0->u.Some, loc_0, &v_1, 0), _fx_catch_1);
         FX_CALL(_fx_M4C_ppFM6stringS1S(&v_1, &v_2, 0), _fx_catch_1);
         fx_str_t slit_1 = FX_MAKE_STR("c_pp.ml: void cannot be used with id \'");
         fx_str_t slit_2 = FX_MAKE_STR("\'");
         {
            const fx_str_t strs_0[] = { slit_1, v_2, slit_2 };
            FX_CALL(fx_strjoin(0, 0, 0, strs_0, 3, &v_3), _fx_catch_1);
         }
         FX_CALL(_fx_M3AstFM11compile_errE2RM5loc_tS(loc_0, &v_3, &v_4, 0), _fx_catch_1);
         FX_THROW(&v_4, false, _fx_catch_1);

      _fx_catch_1: ;
         fx_free_exn(&v_4);
         FX_FREE_STR(&v_3);
         FX_FREE_STR(&v_2);
         FX_FREE_STR(&v_1);
      }
      FX_CHECK_EXN(_fx_catch_2);

   _fx_catch_2: ;
      goto _fx_endmatch_3;
   }
   if (tag_0 == 16) {
      _fx_T2LN14C_form__ctyp_tN14C_form__ctyp_t* vcase_0 = &t_0->u.CTypFunRawPtr;
      _fx_LN14C_form__ctyp_t args_0 = vcase_0->t0;
      FX_CALL(_fx_M2PPFM5beginv1RM1t(pp_0, 0), _fx_catch_7);
      fx_str_t slit_3 = FX_MAKE_STR("");
      fx_str_t slit_4 = FX_MAKE_STR("");
      FX_CALL(
         _fx_M4C_ppFM9pp_ctyp__v7R5PP__tSSN14C_form__ctyp_tNt6option1R9Ast__id_tBR10Ast__loc_t(pp_0, &slit_3, &slit_4,
            vcase_0->t1, &_fx_g10C_pp__None, true, loc_0, 0), _fx_catch_7);
      FX_CALL(_fx_M2PPFM5spacev1RM1t(pp_0, 0), _fx_catch_7);
      fx_str_t slit_5 = FX_MAKE_STR("(*");
      FX_CALL(_fx_M2PPFM3strv2RM1tS(pp_0, &slit_5, 0), _fx_catch_7);
      FX_CALL(_fx_M4C_ppFM10pr_id_opt_v4BNt6option1R9Ast__id_tR10Ast__loc_tR5PP__t(false, id_opt_0, loc_0, pp_0, 0),
         _fx_catch_7);
      fx_str_t slit_6 = FX_MAKE_STR(")(");
      FX_CALL(_fx_M2PPFM3strv2RM1tS(pp_0, &slit_6, 0), _fx_catch_7);
      FX_CALL(_fx_M2PPFM3cutv1RM1t(pp_0, 0), _fx_catch_7);
      FX_CALL(_fx_M2PPFM5beginv1RM1t(pp_0, 0), _fx_catch_7);
      if (args_0 == 0) {
         fx_str_t slit_7 = FX_MAKE_STR("void");
         FX_CALL(_fx_M2PPFM3strv2RM1tS(pp_0, &slit_7, 0), _fx_catch_3);

      _fx_catch_3: ;
         goto _fx_endmatch_0;
      }
      if (args_0 != 0) {
         if (args_0->tl == 0) {
            fx_str_t slit_8 = FX_MAKE_STR("");
            fx_str_t slit_9 = FX_MAKE_STR("");
            FX_CALL(
               _fx_M4C_ppFM9pp_ctyp__v7R5PP__tSSN14C_form__ctyp_tNt6option1R9Ast__id_tBR10Ast__loc_t(pp_0, &slit_8, &slit_9,
                  args_0->hd, &_fx_g10C_pp__None, true, loc_0, 0), _fx_catch_4);

         _fx_catch_4: ;
            goto _fx_endmatch_0;
         }
      }
      _fx_LN14C_form__ctyp_t args_1 = 0;
      int_ nargs_0;
      FX_CALL(_fx_M4C_ppFM8length1_i1LN14C_form__ctyp_t(args_0, &nargs_0, 0), _fx_catch_6);
      int_ i_0 = 0;
      FX_COPY_PTR(args_0, &args_1);
      _fx_LN14C_form__ctyp_t lst_0 = args_1;
      for (; lst_0; lst_0 = lst_0->tl, i_0 += 1) {
         fx_str_t v_5 = {0};
         _fx_N14C_form__ctyp_t ti_0 = lst_0->hd;
         bool last_0 = i_0 == nargs_0 - 1;
         if (last_0) {
            fx_str_t slit_10 = FX_MAKE_STR(""); fx_copy_str(&slit_10, &v_5);
         }
         else {
            fx_str_t slit_11 = FX_MAKE_STR(","); fx_copy_str(&slit_11, &v_5);
         }
         fx_str_t slit_12 = FX_MAKE_STR("");
         FX_CALL(
            _fx_M4C_ppFM9pp_ctyp__v7R5PP__tSSN14C_form__ctyp_tNt6option1R9Ast__id_tBR10Ast__loc_t(pp_0, &slit_12, &v_5, ti_0,
               &_fx_g10C_pp__None, true, loc_0, 0), _fx_catch_5);
         if (!last_0) {
            FX_CALL(_fx_M2PPFM5spacev1RM1t(pp_0, 0), _fx_catch_5);
         }

      _fx_catch_5: ;
         FX_FREE_STR(&v_5);
         FX_CHECK_EXN(_fx_catch_6);
      }

   _fx_catch_6: ;
      if (args_1) {
         _fx_free_LN14C_form__ctyp_t(&args_1);
      }

   _fx_endmatch_0: ;
      FX_CHECK_EXN(_fx_catch_7);
      FX_CALL(_fx_M2PPFM3endv1RM1t(pp_0, 0), _fx_catch_7);
      fx_str_t slit_13 = FX_MAKE_STR(")");
      FX_CALL(_fx_M2PPFM3strv2RM1tS(pp_0, &slit_13, 0), _fx_catch_7);
      FX_CALL(_fx_M2PPFM3endv1RM1t(pp_0, 0), _fx_catch_7);

   _fx_catch_7: ;
      goto _fx_endmatch_3;
   }
   if (tag_0 == 14) {
      fx_str_t v_6 = {0};
      _fx_T2Nt6option1R9Ast__id_tLT2R9Ast__id_tN14C_form__ctyp_t* vcase_1 = &t_0->u.CTypStruct;
      fx_str_t slit_14 = FX_MAKE_STR("struct");
      {
         const fx_str_t strs_1[] = { *prefix0_0, slit_14 };
         FX_CALL(fx_strjoin(0, 0, 0, strs_1, 2, &v_6), _fx_catch_8);
      }
      fx_str_t slit_15 = FX_MAKE_STR("");
      FX_CALL(
         _fx_M4C_ppFM9pr_structv7SNt6option1R9Ast__id_tLT2R9Ast__id_tN14C_form__ctyp_tSNt6option1R9Ast__id_tR10Ast__loc_tR5PP__t(
            &v_6, &vcase_1->t0, vcase_1->t1, &slit_15, id_opt_0, loc_0, pp_0, 0), _fx_catch_8);

   _fx_catch_8: ;
      FX_FREE_STR(&v_6);
      goto _fx_endmatch_3;
   }
   if (tag_0 == 17) {
      _fx_T2LN19C_form__ctyp_attr_tN14C_form__ctyp_t* vcase_2 = &t_0->u.CTypRawPtr;
      if (vcase_2->t0 == 0) {
         _fx_N14C_form__ctyp_t v_7 = vcase_2->t1;
         if (FX_REC_VARIANT_TAG(v_7) == 14) {
            fx_str_t suffix_0 = {0};
            fx_str_t v_8 = {0};
            _fx_T2Nt6option1R9Ast__id_tLT2R9Ast__id_tN14C_form__ctyp_t* vcase_3 = &v_7->u.CTypStruct;
            _fx_Nt6option1R9Ast__id_t* n_opt_0 = &vcase_3->t0;
            if (n_opt_0->tag == 2) {
               fx_str_t v_9 = {0};
               FX_CALL(_fx_M6C_formFM7idc2strS2R9Ast__id_tR10Ast__loc_t(&n_opt_0->u.Some, loc_0, &v_9, 0), _fx_catch_9);
               fx_str_t slit_16 = FX_MAKE_STR(", *");
               {
                  const fx_str_t strs_2[] = { v_9, slit_16 };
                  FX_CALL(fx_strjoin(0, 0, 0, strs_2, 2, &suffix_0), _fx_catch_9);
               }

            _fx_catch_9: ;
               FX_FREE_STR(&v_9);
            }
            else {
               fx_str_t slit_17 = FX_MAKE_STR("*"); fx_copy_str(&slit_17, &suffix_0);
            }
            FX_CHECK_EXN(_fx_catch_10);
            fx_str_t slit_18 = FX_MAKE_STR("struct");
            {
               const fx_str_t strs_3[] = { *prefix0_0, slit_18 };
               FX_CALL(fx_strjoin(0, 0, 0, strs_3, 2, &v_8), _fx_catch_10);
            }
            FX_CALL(
               _fx_M4C_ppFM9pr_structv7SNt6option1R9Ast__id_tLT2R9Ast__id_tN14C_form__ctyp_tSNt6option1R9Ast__id_tR10Ast__loc_tR5PP__t(
                  &v_8, n_opt_0, vcase_3->t1, &suffix_0, id_opt_0, loc_0, pp_0, 0), _fx_catch_10);

         _fx_catch_10: ;
            FX_FREE_STR(&v_8);
            FX_FREE_STR(&suffix_0);
            goto _fx_endmatch_3;
         }
      }
   }
   if (tag_0 == 15) {
      fx_str_t v_10 = {0};
      _fx_T2Nt6option1R9Ast__id_tLT2R9Ast__id_tN14C_form__ctyp_t* vcase_4 = &t_0->u.CTypUnion;
      fx_str_t slit_19 = FX_MAKE_STR("union");
      {
         const fx_str_t strs_4[] = { *prefix0_0, slit_19 };
         FX_CALL(fx_strjoin(0, 0, 0, strs_4, 2, &v_10), _fx_catch_11);
      }
      fx_str_t slit_20 = FX_MAKE_STR("");
      FX_CALL(
         _fx_M4C_ppFM9pr_structv7SNt6option1R9Ast__id_tLT2R9Ast__id_tN14C_form__ctyp_tSNt6option1R9Ast__id_tR10Ast__loc_tR5PP__t(
            &v_10, &vcase_4->t0, vcase_4->t1, &slit_20, id_opt_0, loc_0, pp_0, 0), _fx_catch_11);

   _fx_catch_11: ;
      FX_FREE_STR(&v_10);
      goto _fx_endmatch_3;
   }
   if (tag_0 == 17) {
      _fx_T2LN19C_form__ctyp_attr_tN14C_form__ctyp_t* vcase_5 = &t_0->u.CTypRawPtr;
      _fx_LN19C_form__ctyp_attr_t attrs_0 = vcase_5->t0;
      FX_CALL(_fx_M2PPFM5beginv1RM1t(pp_0, 0), _fx_catch_12);
      bool v_11;
      FX_CALL(_fx_M4C_ppFM3memB2LN19C_form__ctyp_attr_tN19C_form__ctyp_attr_t(attrs_0, &_fx_g16C_pp__CTypStatic, &v_11, 0),
         _fx_catch_12);
      if (v_11) {
         fx_str_t slit_21 = FX_MAKE_STR("static "); FX_CALL(_fx_M2PPFM3strv2RM1tS(pp_0, &slit_21, 0), _fx_catch_12);
      }
      bool v_12;
      FX_CALL(_fx_M4C_ppFM3memB2LN19C_form__ctyp_attr_tN19C_form__ctyp_attr_t(attrs_0, &_fx_g18C_pp__CTypVolatile, &v_12, 0),
         _fx_catch_12);
      if (v_12) {
         fx_str_t slit_22 = FX_MAKE_STR("volatile "); FX_CALL(_fx_M2PPFM3strv2RM1tS(pp_0, &slit_22, 0), _fx_catch_12);
      }
      fx_str_t slit_23 = FX_MAKE_STR("");
      fx_str_t slit_24 = FX_MAKE_STR("");
      FX_CALL(
         _fx_M4C_ppFM9pp_ctyp__v7R5PP__tSSN14C_form__ctyp_tNt6option1R9Ast__id_tBR10Ast__loc_t(pp_0, &slit_23, &slit_24,
            vcase_5->t1, &_fx_g10C_pp__None, fwd_mode_0, loc_0, 0), _fx_catch_12);
      fx_str_t slit_25 = FX_MAKE_STR("*");
      FX_CALL(_fx_M2PPFM3strv2RM1tS(pp_0, &slit_25, 0), _fx_catch_12);
      FX_CALL(_fx_M4C_ppFM9pr_id_optv3Nt6option1R9Ast__id_tR10Ast__loc_tR5PP__t(id_opt_0, loc_0, pp_0, 0), _fx_catch_12);
      FX_CALL(_fx_M2PPFM3endv1RM1t(pp_0, 0), _fx_catch_12);

   _fx_catch_12: ;
      goto _fx_endmatch_3;
   }
   if (tag_0 == 18) {
      _fx_T2LN19C_form__ctyp_attr_tN14C_form__ctyp_t* vcase_6 = &t_0->u.CTypRawArray;
      _fx_LN19C_form__ctyp_attr_t attrs_1 = vcase_6->t0;
      FX_CALL(_fx_M2PPFM5beginv1RM1t(pp_0, 0), _fx_catch_13);
      bool v_13;
      FX_CALL(_fx_M4C_ppFM3memB2LN19C_form__ctyp_attr_tN19C_form__ctyp_attr_t(attrs_1, &_fx_g16C_pp__CTypStatic, &v_13, 0),
         _fx_catch_13);
      if (v_13) {
         fx_str_t slit_26 = FX_MAKE_STR("static "); FX_CALL(_fx_M2PPFM3strv2RM1tS(pp_0, &slit_26, 0), _fx_catch_13);
      }
      bool v_14;
      FX_CALL(_fx_M4C_ppFM3memB2LN19C_form__ctyp_attr_tN19C_form__ctyp_attr_t(attrs_1, &_fx_g18C_pp__CTypVolatile, &v_14, 0),
         _fx_catch_13);
      if (v_14) {
         fx_str_t slit_27 = FX_MAKE_STR("volatile "); FX_CALL(_fx_M2PPFM3strv2RM1tS(pp_0, &slit_27, 0), _fx_catch_13);
      }
      bool v_15;
      FX_CALL(_fx_M4C_ppFM3memB2LN19C_form__ctyp_attr_tN19C_form__ctyp_attr_t(attrs_1, &_fx_g15C_pp__CTypConst, &v_15, 0),
         _fx_catch_13);
      if (v_15) {
         fx_str_t slit_28 = FX_MAKE_STR("const "); FX_CALL(_fx_M2PPFM3strv2RM1tS(pp_0, &slit_28, 0), _fx_catch_13);
      }
      fx_str_t slit_29 = FX_MAKE_STR("");
      fx_str_t slit_30 = FX_MAKE_STR("");
      FX_CALL(
         _fx_M4C_ppFM9pp_ctyp__v7R5PP__tSSN14C_form__ctyp_tNt6option1R9Ast__id_tBR10Ast__loc_t(pp_0, &slit_29, &slit_30,
            vcase_6->t1, &_fx_g10C_pp__None, fwd_mode_0, loc_0, 0), _fx_catch_13);
      FX_CALL(_fx_M2PPFM5spacev1RM1t(pp_0, 0), _fx_catch_13);
      FX_CALL(_fx_M4C_ppFM10pr_id_opt_v4BNt6option1R9Ast__id_tR10Ast__loc_tR5PP__t(false, id_opt_0, loc_0, pp_0, 0),
         _fx_catch_13);
      fx_str_t slit_31 = FX_MAKE_STR("[]");
      FX_CALL(_fx_M2PPFM3strv2RM1tS(pp_0, &slit_31, 0), _fx_catch_13);
      FX_CALL(_fx_M2PPFM3endv1RM1t(pp_0, 0), _fx_catch_13);

   _fx_catch_13: ;
      goto _fx_endmatch_3;
   }
   if (tag_0 == 21) {
      _fx_R9Ast__id_t* n_0 = &t_0->u.CTypName;
      if (fwd_mode_0 == false) {
         FX_CALL(_fx_M4C_ppFM5pp_idv3R5PP__tR9Ast__id_tR10Ast__loc_t(pp_0, n_0, loc_0, 0), _fx_catch_14);

      _fx_catch_14: ;
         goto _fx_endmatch_2;
      }
      if (fwd_mode_0 == true) {
         if (n_0->m == 0) {
            FX_CALL(_fx_M4C_ppFM5pp_idv3R5PP__tR9Ast__id_tR10Ast__loc_t(pp_0, n_0, loc_0, 0), _fx_catch_15);

         _fx_catch_15: ;
            goto _fx_endmatch_2;
         }
      }
      _fx_N15C_form__cinfo_t v_16 = {0};
      _fx_R17C_form__cdeftyp_t v_17 = {0};
      _fx_R17C_form__cdeftyp_t v_18 = {0};
      FX_CALL(_fx_M6C_formFM6cinfo_N15C_form__cinfo_t2R9Ast__id_tR10Ast__loc_t(n_0, loc_0, &v_16, 0), _fx_catch_20);
      int tag_1 = v_16.tag;
      if (tag_1 == 4) {
         _fx_copy_R17C_form__cdeftyp_t(&v_16.u.CTyp->data, &v_17);
         _fx_N14C_form__ctyp_t v_19 = v_17.ct_typ;
         if (FX_REC_VARIANT_TAG(v_19) == 17) {
            _fx_N14C_form__ctyp_t v_20 = v_19->u.CTypRawPtr.t1;
            if (FX_REC_VARIANT_TAG(v_20) == 14) {
               _fx_Nt6option1R9Ast__id_t* v_21 = &v_20->u.CTypStruct.t0;
               if (v_21->tag == 2) {
                  fx_str_t slit_32 = FX_MAKE_STR("struct ");
                  FX_CALL(_fx_M2PPFM3strv2RM1tS(pp_0, &slit_32, 0), _fx_catch_16);
                  FX_CALL(_fx_M4C_ppFM5pp_idv3R5PP__tR9Ast__id_tR10Ast__loc_t(pp_0, &v_21->u.Some, loc_0, 0), _fx_catch_16);
                  fx_str_t slit_33 = FX_MAKE_STR("*");
                  FX_CALL(_fx_M2PPFM3strv2RM1tS(pp_0, &slit_33, 0), _fx_catch_16);

               _fx_catch_16: ;
                  goto _fx_endmatch_1;
               }
            }
         }
      }
      if (tag_1 == 4) {
         _fx_copy_R17C_form__cdeftyp_t(&v_16.u.CTyp->data, &v_18);
         _fx_N14C_form__ctyp_t v_22 = v_18.ct_typ;
         if (FX_REC_VARIANT_TAG(v_22) == 14) {
            _fx_Nt6option1R9Ast__id_t* v_23 = &v_22->u.CTypStruct.t0;
            if (v_23->tag == 2) {
               fx_str_t slit_34 = FX_MAKE_STR("struct ");
               FX_CALL(_fx_M2PPFM3strv2RM1tS(pp_0, &slit_34, 0), _fx_catch_17);
               FX_CALL(_fx_M4C_ppFM5pp_idv3R5PP__tR9Ast__id_tR10Ast__loc_t(pp_0, &v_23->u.Some, loc_0, 0), _fx_catch_17);

            _fx_catch_17: ;
               goto _fx_endmatch_1;
            }
         }
      }
      if (tag_1 == 6) {
         _fx_R23C_form__cdefinterface_t v_24 = {0};
         fx_str_t v_25 = {0};
         fx_str_t v_26 = {0};
         _fx_copy_R23C_form__cdefinterface_t(&v_16.u.CInterface->data, &v_24);
         FX_CALL(_fx_M4C_ppFM6stringS1S(&v_24.ci_cname, &v_25, 0), _fx_catch_18);
         fx_str_t slit_35 = FX_MAKE_STR("struct ");
         {
            const fx_str_t strs_5[] = { slit_35, v_25 };
            FX_CALL(fx_strjoin(0, 0, 0, strs_5, 2, &v_26), _fx_catch_18);
         }
         FX_CALL(_fx_M2PPFM3strv2RM1tS(pp_0, &v_26, 0), _fx_catch_18);

      _fx_catch_18: ;
         FX_FREE_STR(&v_26);
         FX_FREE_STR(&v_25);
         _fx_free_R23C_form__cdefinterface_t(&v_24);
         goto _fx_endmatch_1;
      }
      if (FX_STR_LENGTH(*prefix0_0) != 0) {
         FX_CALL(_fx_M2PPFM3strv2RM1tS(pp_0, prefix0_0, 0), _fx_catch_19);
         FX_CALL(_fx_M2PPFM5spacev1RM1t(pp_0, 0), _fx_catch_19);
      }
      FX_CALL(_fx_M4C_ppFM5pp_idv3R5PP__tR9Ast__id_tR10Ast__loc_t(pp_0, n_0, loc_0, 0), _fx_catch_19);

   _fx_catch_19: ;

   _fx_endmatch_1: ;
      FX_CHECK_EXN(_fx_catch_20);

   _fx_catch_20: ;
      _fx_free_R17C_form__cdeftyp_t(&v_18);
      _fx_free_R17C_form__cdeftyp_t(&v_17);
      _fx_free_N15C_form__cinfo_t(&v_16);

   _fx_endmatch_2: ;
      FX_CHECK_EXN(_fx_catch_21);
      FX_CALL(_fx_M4C_ppFM9pr_id_optv3Nt6option1R9Ast__id_tR10Ast__loc_tR5PP__t(id_opt_0, loc_0, pp_0, 0), _fx_catch_21);

   _fx_catch_21: ;
      goto _fx_endmatch_3;
   }
   if (tag_0 == 22) {
      fx_str_t slit_36 = FX_MAKE_STR("/*<label>*/");
      FX_CALL(_fx_M2PPFM3strv2RM1tS(pp_0, &slit_36, 0), _fx_catch_22);
      FX_CALL(_fx_M4C_ppFM9pr_id_optv3Nt6option1R9Ast__id_tR10Ast__loc_tR5PP__t(id_opt_0, loc_0, pp_0, 0), _fx_catch_22);

   _fx_catch_22: ;
      goto _fx_endmatch_3;
   }
   if (tag_0 == 23) {
      fx_str_t slit_37 = FX_MAKE_STR("void");
      FX_CALL(_fx_M2PPFM3strv2RM1tS(pp_0, &slit_37, 0), _fx_catch_23);
      FX_CALL(_fx_M4C_ppFM9pr_id_optv3Nt6option1R9Ast__id_tR10Ast__loc_tR5PP__t(id_opt_0, loc_0, pp_0, 0), _fx_catch_23);

   _fx_catch_23: ;
      goto _fx_endmatch_3;
   }
   FX_FAST_THROW(FX_EXN_NoMatchError, _fx_cleanup);

_fx_endmatch_3: ;
   FX_CHECK_EXN(_fx_cleanup);
   FX_CALL(_fx_M2PPFM3strv2RM1tS(pp_0, suffix0_0, 0), _fx_cleanup);
   FX_CALL(_fx_M2PPFM3endv1RM1t(pp_0, 0), _fx_cleanup);

_fx_cleanup: ;
   return fx_status;
}

static int _fx_M4C_ppFM10pr_id_opt_v4BNt6option1R9Ast__id_tR10Ast__loc_tR5PP__t(
   bool add_space_0,
   struct _fx_Nt6option1R9Ast__id_t* id_opt_0,
   struct _fx_R10Ast__loc_t* loc_0,
   struct _fx_R5PP__t* pp_0,
   void* fx_fv)
{
   int fx_status = 0;
   if (id_opt_0->tag == 2) {
      fx_str_t v_0 = {0};
      if (add_space_0) {
         FX_CALL(_fx_M2PPFM5spacev1RM1t(pp_0, 0), _fx_catch_0);
      }
      FX_CALL(_fx_M6C_formFM7idc2strS2R9Ast__id_tR10Ast__loc_t(&id_opt_0->u.Some, loc_0, &v_0, 0), _fx_catch_0);
      FX_CALL(_fx_M2PPFM3strv2RM1tS(pp_0, &v_0, 0), _fx_catch_0);

   _fx_catch_0: ;
      FX_FREE_STR(&v_0);
   }
   return fx_status;
}

static int _fx_M4C_ppFM9pr_id_optv3Nt6option1R9Ast__id_tR10Ast__loc_tR5PP__t(
   struct _fx_Nt6option1R9Ast__id_t* id_opt_0,
   struct _fx_R10Ast__loc_t* loc_0,
   struct _fx_R5PP__t* pp_0,
   void* fx_fv)
{
   int fx_status = 0;
   if (id_opt_0->tag == 2) {
      fx_str_t v_0 = {0};
      FX_CALL(_fx_M2PPFM5spacev1RM1t(pp_0, 0), _fx_catch_0);
      FX_CALL(_fx_M6C_formFM7idc2strS2R9Ast__id_tR10Ast__loc_t(&id_opt_0->u.Some, loc_0, &v_0, 0), _fx_catch_0);
      FX_CALL(_fx_M2PPFM3strv2RM1tS(pp_0, &v_0, 0), _fx_catch_0);

   _fx_catch_0: ;
      FX_FREE_STR(&v_0);
   }
   return fx_status;
}

static int
   _fx_M4C_ppFM9pr_structv7SNt6option1R9Ast__id_tLT2R9Ast__id_tN14C_form__ctyp_tSNt6option1R9Ast__id_tR10Ast__loc_tR5PP__t(
   fx_str_t* prefix_0,
   struct _fx_Nt6option1R9Ast__id_t* n_opt_0,
   struct _fx_LT2R9Ast__id_tN14C_form__ctyp_t_data_t* elems_0,
   fx_str_t* suffix_0,
   struct _fx_Nt6option1R9Ast__id_t* id_opt_0,
   struct _fx_R10Ast__loc_t* loc_0,
   struct _fx_R5PP__t* pp_0,
   void* fx_fv)
{
   fx_str_t v_0 = {0};
   fx_str_t v_1 = {0};
   int fx_status = 0;
   FX_CALL(fx_check_stack(), _fx_cleanup);
   fx_str_t slit_0 = FX_MAKE_STR(" ");
   {
      const fx_str_t strs_0[] = { *prefix_0, slit_0 };
      FX_CALL(fx_strjoin(0, 0, 0, strs_0, 2, &v_0), _fx_cleanup);
   }
   FX_CALL(_fx_M2PPFM3strv2RM1tS(pp_0, &v_0, 0), _fx_cleanup);
   if (n_opt_0->tag == 2) {
      fx_str_t v_2 = {0};
      FX_CALL(_fx_M6C_formFM7idc2strS2R9Ast__id_tR10Ast__loc_t(&n_opt_0->u.Some, loc_0, &v_2, 0), _fx_catch_0);
      FX_CALL(_fx_M2PPFM3strv2RM1tS(pp_0, &v_2, 0), _fx_catch_0);
      fx_str_t slit_1 = FX_MAKE_STR(" ");
      FX_CALL(_fx_M2PPFM3strv2RM1tS(pp_0, &slit_1, 0), _fx_catch_0);

   _fx_catch_0: ;
      FX_FREE_STR(&v_2);
   }
   FX_CHECK_EXN(_fx_cleanup);
   fx_str_t slit_2 = FX_MAKE_STR("{");
   FX_CALL(_fx_M2PPFM3strv2RM1tS(pp_0, &slit_2, 0), _fx_cleanup);
   _fx_LT2R9Ast__id_tN14C_form__ctyp_t lst_0 = elems_0;
   for (; lst_0; lst_0 = lst_0->tl) {
      _fx_N14C_form__ctyp_t ti_0 = 0;
      _fx_T2R9Ast__id_tN14C_form__ctyp_t* __pat___0 = &lst_0->hd;
      _fx_R9Ast__id_t ni_0 = __pat___0->t0;
      FX_COPY_PTR(__pat___0->t1, &ti_0);
      FX_CALL(_fx_M2PPFM7newlinev1RM1t(pp_0, 0), _fx_catch_1);
      int tag_0 = FX_REC_VARIANT_TAG(ti_0);
      bool need_nested_box_0;
      bool res_0;
      if (tag_0 == 14) {
         res_0 = true; goto _fx_endmatch_0;
      }
      if (tag_0 == 15) {
         res_0 = true; goto _fx_endmatch_0;
      }
      if (tag_0 == 17) {
         if (FX_REC_VARIANT_TAG(ti_0->u.CTypRawPtr.t1) == 14) {
            res_0 = true; goto _fx_endmatch_0;
         }
      }
      res_0 = false;

   _fx_endmatch_0: ;
      FX_CHECK_EXN(_fx_catch_1);
      if (res_0) {
         need_nested_box_0 = false; goto _fx_endmatch_1;
      }
      need_nested_box_0 = true;

   _fx_endmatch_1: ;
      FX_CHECK_EXN(_fx_catch_1);
      if (need_nested_box_0) {
         FX_CALL(_fx_M2PPFM5beginv1RM1t(pp_0, 0), _fx_catch_1);
      }
      _fx_Nt6option1R9Ast__id_t v_3;
      _fx_M4C_ppFM4SomeNt6option1R9Ast__id_t1R9Ast__id_t(&ni_0, &v_3);
      fx_str_t slit_3 = FX_MAKE_STR("");
      fx_str_t slit_4 = FX_MAKE_STR(";");
      FX_CALL(
         _fx_M4C_ppFM9pp_ctyp__v7R5PP__tSSN14C_form__ctyp_tNt6option1R9Ast__id_tBR10Ast__loc_t(pp_0, &slit_3, &slit_4, ti_0,
            &v_3, true, loc_0, 0), _fx_catch_1);
      if (need_nested_box_0) {
         FX_CALL(_fx_M2PPFM3endv1RM1t(pp_0, 0), _fx_catch_1);
      }

   _fx_catch_1: ;
      if (ti_0) {
         _fx_free_N14C_form__ctyp_t(&ti_0);
      }
      FX_CHECK_EXN(_fx_cleanup);
   }
   FX_CALL(_fx_M2PPFM8newlineuv1RM1t(pp_0, 0), _fx_cleanup);
   fx_str_t slit_5 = FX_MAKE_STR("} ");
   {
      const fx_str_t strs_1[] = { slit_5, *suffix_0 };
      FX_CALL(fx_strjoin(0, 0, 0, strs_1, 2, &v_1), _fx_cleanup);
   }
   FX_CALL(_fx_M2PPFM3strv2RM1tS(pp_0, &v_1, 0), _fx_cleanup);
   if (id_opt_0->tag == 2) {
      fx_str_t v_4 = {0};
      FX_CALL(_fx_M6C_formFM7idc2strS2R9Ast__id_tR10Ast__loc_t(&id_opt_0->u.Some, loc_0, &v_4, 0), _fx_catch_2);
      FX_CALL(_fx_M2PPFM3strv2RM1tS(pp_0, &v_4, 0), _fx_catch_2);

   _fx_catch_2: ;
      FX_FREE_STR(&v_4);
   }

_fx_cleanup: ;
   FX_FREE_STR(&v_0);
   FX_FREE_STR(&v_1);
   return fx_status;
}

FX_EXTERN_C int _fx_M4C_ppFM8pp_ctyp_v4R5PP__tN14C_form__ctyp_tNt6option1R9Ast__id_tR10Ast__loc_t(
   struct _fx_R5PP__t* pp_0,
   struct _fx_N14C_form__ctyp_t_data_t* t_0,
   struct _fx_Nt6option1R9Ast__id_t* id_opt_0,
   struct _fx_R10Ast__loc_t* loc_0,
   void* fx_fv)
{
   int fx_status = 0;
   fx_str_t slit_0 = FX_MAKE_STR("");
   fx_str_t slit_1 = FX_MAKE_STR("");
   FX_CALL(
      _fx_M4C_ppFM9pp_ctyp__v7R5PP__tSSN14C_form__ctyp_tNt6option1R9Ast__id_tBR10Ast__loc_t(pp_0, &slit_0, &slit_1, t_0,
         id_opt_0, false, loc_0, 0), _fx_cleanup);

_fx_cleanup: ;
   return fx_status;
}

FX_EXTERN_C int _fx_M4C_ppFM8pp_cexp_v3R5PP__tN14C_form__cexp_ti(
   struct _fx_R5PP__t* pp_0,
   struct _fx_N14C_form__cexp_t_data_t* e_0,
   int_ pr_0,
   void* fx_fv)
{
   int fx_status = 0;
   FX_CALL(fx_check_stack(), _fx_cleanup);
   int tag_0 = FX_REC_VARIANT_TAG(e_0);
   if (tag_0 == 1) {
      _fx_T2R9Ast__id_tT2N14C_form__ctyp_tR10Ast__loc_t* vcase_0 = &e_0->u.CExpIdent;
      FX_CALL(_fx_M4C_ppFM5pp_idv3R5PP__tR9Ast__id_tR10Ast__loc_t(pp_0, &vcase_0->t0, &vcase_0->t1.t1, 0), _fx_catch_0);

   _fx_catch_0: ;
      goto _fx_endmatch_4;
   }
   if (tag_0 == 2) {
      _fx_T2N14K_form__klit_tT2N14C_form__ctyp_tR10Ast__loc_t* vcase_1 = &e_0->u.CExpLit;
      _fx_R10Ast__loc_t* loc_0 = &vcase_1->t1.t1;
      _fx_N14K_form__klit_t* l_0 = &vcase_1->t0;
      int tag_1 = l_0->tag;
      if (tag_1 == 8) {
         fx_str_t slit_0 = FX_MAKE_STR("0");
         FX_CALL(_fx_M2PPFM3strv2RM1tS(pp_0, &slit_0, 0), _fx_catch_1);

      _fx_catch_1: ;
         goto _fx_endmatch_0;
      }
      if (tag_1 == 6) {
         fx_str_t v_0 = {0};
         fx_str_t v_1 = {0};
         int_ res_0;
         FX_CALL(_fx_F3ordi1C(l_0->u.KLitChar, &res_0, 0), _fx_catch_2);
         FX_CALL(_fx_F6stringS1i(res_0, &v_0, 0), _fx_catch_2);
         fx_str_t slit_1 = FX_MAKE_STR("(char_)");
         {
            const fx_str_t strs_0[] = { slit_1, v_0 };
            FX_CALL(fx_strjoin(0, 0, 0, strs_0, 2, &v_1), _fx_catch_2);
         }
         FX_CALL(_fx_M2PPFM3strv2RM1tS(pp_0, &v_1, 0), _fx_catch_2);

      _fx_catch_2: ;
         FX_FREE_STR(&v_1);
         FX_FREE_STR(&v_0);
         goto _fx_endmatch_0;
      }
      if (tag_1 == 5) {
         _fx_LS sl_0 = 0;
         fx_str_t v_2 = {0};
         fx_str_t* s0_0 = &l_0->u.KLitString;
         FX_CALL(_fx_M6StringFM5splitLS3SCB(s0_0, (char_)10, true, &sl_0, 0), _fx_catch_4);
         if (sl_0 == 0) {
            FX_CALL(_fx_M6StringFM7escapedS2SB(s0_0, true, &v_2, 0), _fx_catch_4);
            FX_CALL(_fx_M2PPFM3strv2RM1tS(pp_0, &v_2, 0), _fx_catch_4);
         }
         else {
            int_ n_0;
            FX_CALL(_fx_M4C_ppFM8length1_i1LS(sl_0, &n_0, 0), _fx_catch_4);
            int_ i_0 = 0;
            _fx_LS lst_0 = sl_0;
            for (; lst_0; lst_0 = lst_0->tl, i_0 += 1) {
               fx_str_t s_0 = {0};
               fx_str_t s_1 = {0};
               fx_str_t v_3 = {0};
               fx_str_t* s_2 = &lst_0->hd;
               bool v_4;
               if (i_0 < n_0 - 1) {
                  v_4 = true;
               }
               else {
                  v_4 = _fx_M6StringFM8endswithB2SC(s0_0, (char_)10, 0);
               }
               if (v_4) {
                  fx_str_t slit_2 = FX_MAKE_STR("\n");
                  {
                     const fx_str_t strs_1[] = { *s_2, slit_2 };
                     FX_CALL(fx_strjoin(0, 0, 0, strs_1, 2, &s_0), _fx_catch_3);
                  }
               }
               else {
                  fx_copy_str(s_2, &s_0);
               }
               FX_CALL(_fx_M6StringFM7escapedS2SB(&s_0, true, &s_1, 0), _fx_catch_3);
               if (i_0 == 0) {
                  FX_CALL(_fx_M2PPFM3strv2RM1tS(pp_0, &s_1, 0), _fx_catch_3);
               }
               else {
                  FX_CALL(_fx_M2PPFM7newlinev1RM1t(pp_0, 0), _fx_catch_3);
                  fx_str_t slit_3 = FX_MAKE_STR("U");
                  {
                     const fx_str_t strs_2[] = { slit_3, s_1 };
                     FX_CALL(fx_strjoin(0, 0, 0, strs_2, 2, &v_3), _fx_catch_3);
                  }
                  FX_CALL(_fx_M2PPFM3strv2RM1tS(pp_0, &v_3, 0), _fx_catch_3);
               }

            _fx_catch_3: ;
               FX_FREE_STR(&v_3);
               FX_FREE_STR(&s_1);
               FX_FREE_STR(&s_0);
               FX_CHECK_EXN(_fx_catch_4);
            }
         }

      _fx_catch_4: ;
         FX_FREE_STR(&v_2);
         if (sl_0) {
            _fx_free_LS(&sl_0);
         }
         goto _fx_endmatch_0;
      }
      if (tag_1 == 4) {
         _fx_T2id* vcase_2 = &l_0->u.KLitFloat;
         if (vcase_2->t0 == 16) {
            _fx_N14K_form__klit_t v_5 = {0};
            fx_str_t v_6 = {0};
            fx_str_t v_7 = {0};
            fx_str_t v_8 = {0};
            _fx_M6K_formFM9KLitFloatN14K_form__klit_t2id(32, vcase_2->t1, &v_5);
            FX_CALL(_fx_M6K_formFM8klit2strS3N14K_form__klit_tBR10Ast__loc_t(&v_5, true, loc_0, &v_6, 0), _fx_catch_5);
            FX_CALL(_fx_M4C_ppFM6stringS1S(&v_6, &v_7, 0), _fx_catch_5);
            fx_str_t slit_4 = FX_MAKE_STR("FX_FLOAT16(");
            fx_str_t slit_5 = FX_MAKE_STR(")");
            {
               const fx_str_t strs_3[] = { slit_4, v_7, slit_5 };
               FX_CALL(fx_strjoin(0, 0, 0, strs_3, 3, &v_8), _fx_catch_5);
            }
            FX_CALL(_fx_M2PPFM3strv2RM1tS(pp_0, &v_8, 0), _fx_catch_5);

         _fx_catch_5: ;
            FX_FREE_STR(&v_8);
            FX_FREE_STR(&v_7);
            FX_FREE_STR(&v_6);
            _fx_free_N14K_form__klit_t(&v_5);
            goto _fx_endmatch_0;
         }
      }
      fx_str_t v_9 = {0};
      FX_CALL(_fx_M6K_formFM8klit2strS3N14K_form__klit_tBR10Ast__loc_t(l_0, true, loc_0, &v_9, 0), _fx_catch_6);
      FX_CALL(_fx_M2PPFM3strv2RM1tS(pp_0, &v_9, 0), _fx_catch_6);

   _fx_catch_6: ;
      FX_FREE_STR(&v_9);

   _fx_endmatch_0: ;
      FX_CHECK_EXN(_fx_catch_7);

   _fx_catch_7: ;
      goto _fx_endmatch_4;
   }
   if (tag_0 == 3) {
      _fx_T4N17C_form__cbinary_tN14C_form__cexp_tN14C_form__cexp_tT2N14C_form__ctyp_tR10Ast__loc_t* vcase_3 =
         &e_0->u.CExpBinary;
      _fx_N17C_form__cbinary_t* bop_0 = &vcase_3->t0;
      if (bop_0->tag == 14) {
         _fx_T3SiN13C_pp__assoc_t v_10 = {0};
         FX_CALL(_fx_M4C_ppFM10binop2str_T3SiN13C_pp__assoc_t1N17C_form__cbinary_t(bop_0, &v_10, 0), _fx_catch_8);
         int_ pr0_0 = v_10.t1;
         FX_CALL(_fx_M2PPFM5beginv1RM1t(pp_0, 0), _fx_catch_8);
         FX_CALL(_fx_M4C_ppFM8pp_cexp_v3R5PP__tN14C_form__cexp_ti(pp_0, vcase_3->t1, pr0_0, 0), _fx_catch_8);
         fx_str_t slit_6 = FX_MAKE_STR("[");
         FX_CALL(_fx_M2PPFM3strv2RM1tS(pp_0, &slit_6, 0), _fx_catch_8);
         FX_CALL(_fx_M2PPFM3cutv1RM1t(pp_0, 0), _fx_catch_8);
         FX_CALL(_fx_M4C_ppFM8pp_cexp_v3R5PP__tN14C_form__cexp_ti(pp_0, vcase_3->t2, 0, 0), _fx_catch_8);
         FX_CALL(_fx_M2PPFM3cutv1RM1t(pp_0, 0), _fx_catch_8);
         fx_str_t slit_7 = FX_MAKE_STR("]");
         FX_CALL(_fx_M2PPFM3strv2RM1tS(pp_0, &slit_7, 0), _fx_catch_8);
         FX_CALL(_fx_M2PPFM3endv1RM1t(pp_0, 0), _fx_catch_8);

      _fx_catch_8: ;
         _fx_free_T3SiN13C_pp__assoc_t(&v_10);
         goto _fx_endmatch_4;
      }
   }
   if (tag_0 == 3) {
      _fx_T3SiN13C_pp__assoc_t v_11 = {0};
      fx_str_t bop_str_0 = {0};
      _fx_T4N17C_form__cbinary_tN14C_form__cexp_tN14C_form__cexp_tT2N14C_form__ctyp_tR10Ast__loc_t* vcase_4 =
         &e_0->u.CExpBinary;
      _fx_N14C_form__cexp_t b_0 = vcase_4->t2;
      _fx_N14C_form__cexp_t a_0 = vcase_4->t1;
      _fx_N17C_form__cbinary_t* bop_1 = &vcase_4->t0;
      FX_CALL(_fx_M4C_ppFM10binop2str_T3SiN13C_pp__assoc_t1N17C_form__cbinary_t(bop_1, &v_11, 0), _fx_catch_9);
      fx_copy_str(&v_11.t0, &bop_str_0);
      int_ pr0_1 = v_11.t1;
      _fx_N13C_pp__assoc_t assoc_0 = v_11.t2;
      bool use_br_0 = pr0_1 < pr_0;
      FX_CALL(_fx_M2PPFM5beginv1RM1t(pp_0, 0), _fx_catch_9);
      if (use_br_0) {
         fx_str_t slit_8 = FX_MAKE_STR("(");
         FX_CALL(_fx_M2PPFM3strv2RM1tS(pp_0, &slit_8, 0), _fx_catch_9);
         FX_CALL(_fx_M2PPFM3cutv1RM1t(pp_0, 0), _fx_catch_9);
      }
      bool is_shift_0;
      if (bop_1->tag == 6) {
         is_shift_0 = true;
      }
      else {
         is_shift_0 = bop_1->tag == 7;
      }
      int_ a_pr_0;
      if (is_shift_0) {
         a_pr_0 = 1350;
      }
      else if (assoc_0.tag == 1) {
         a_pr_0 = pr0_1;
      }
      else {
         a_pr_0 = pr0_1 + 1;
      }
      int_ b_pr_0;
      if (is_shift_0) {
         b_pr_0 = 1350;
      }
      else if (assoc_0.tag == 2) {
         b_pr_0 = pr0_1;
      }
      else {
         b_pr_0 = pr0_1 + 1;
      }
      bool is_bitwise_0;
      bool t_0;
      if (bop_1->tag == 8) {
         t_0 = true;
      }
      else {
         t_0 = bop_1->tag == 9;
      }
      if (t_0) {
         is_bitwise_0 = true;
      }
      else {
         is_bitwise_0 = bop_1->tag == 10;
      }
      bool t_1;
      if (is_bitwise_0) {
         if (FX_REC_VARIANT_TAG(a_0) == 3) {
            bool res_1;
            FX_CALL(_fx_M4C_ppFM6__ne__B2N17C_form__cbinary_tN17C_form__cbinary_t(&a_0->u.CExpBinary.t0, bop_1, &res_1, 0),
               _fx_catch_9);
            if (res_1) {
               t_1 = true; goto _fx_endmatch_1;
            }
         }
         t_1 = false;

      _fx_endmatch_1: ;
         FX_CHECK_EXN(_fx_catch_9);
      }
      else {
         t_1 = false;
      }
      int_ a_pr_1;
      if (t_1) {
         a_pr_1 = 1350;
      }
      else {
         a_pr_1 = a_pr_0;
      }
      bool t_2;
      if (is_bitwise_0) {
         if (FX_REC_VARIANT_TAG(b_0) == 3) {
            bool res_2;
            FX_CALL(_fx_M4C_ppFM6__ne__B2N17C_form__cbinary_tN17C_form__cbinary_t(&b_0->u.CExpBinary.t0, bop_1, &res_2, 0),
               _fx_catch_9);
            if (res_2) {
               t_2 = true; goto _fx_endmatch_2;
            }
         }
         t_2 = false;

      _fx_endmatch_2: ;
         FX_CHECK_EXN(_fx_catch_9);
      }
      else {
         t_2 = false;
      }
      int_ b_pr_1;
      if (t_2) {
         b_pr_1 = 1350;
      }
      else {
         b_pr_1 = b_pr_0;
      }
      FX_CALL(_fx_M4C_ppFM8pp_cexp_v3R5PP__tN14C_form__cexp_ti(pp_0, a_0, a_pr_1, 0), _fx_catch_9);
      FX_CALL(_fx_M2PPFM5spacev1RM1t(pp_0, 0), _fx_catch_9);
      FX_CALL(_fx_M2PPFM3strv2RM1tS(pp_0, &bop_str_0, 0), _fx_catch_9);
      FX_CALL(_fx_M2PPFM5spacev1RM1t(pp_0, 0), _fx_catch_9);
      FX_CALL(_fx_M4C_ppFM8pp_cexp_v3R5PP__tN14C_form__cexp_ti(pp_0, b_0, b_pr_1, 0), _fx_catch_9);
      if (use_br_0) {
         FX_CALL(_fx_M2PPFM3cutv1RM1t(pp_0, 0), _fx_catch_9);
         fx_str_t slit_9 = FX_MAKE_STR(")");
         FX_CALL(_fx_M2PPFM3strv2RM1tS(pp_0, &slit_9, 0), _fx_catch_9);
      }
      FX_CALL(_fx_M2PPFM3endv1RM1t(pp_0, 0), _fx_catch_9);

   _fx_catch_9: ;
      FX_FREE_STR(&bop_str_0);
      _fx_free_T3SiN13C_pp__assoc_t(&v_11);
      goto _fx_endmatch_4;
   }
   if (tag_0 == 4) {
      _fx_T3SiN13C_pp__assoc_t v_12 = {0};
      fx_str_t uop_str_0 = {0};
      _fx_T3N16C_form__cunary_tN14C_form__cexp_tT2N14C_form__ctyp_tR10Ast__loc_t* vcase_5 = &e_0->u.CExpUnary;
      _fx_N14C_form__cexp_t e_1 = vcase_5->t1;
      _fx_N16C_form__cunary_t* uop_0 = &vcase_5->t0;
      FX_CALL(_fx_M4C_ppFM9unop2str_T3SiN13C_pp__assoc_t1N16C_form__cunary_t(uop_0, &v_12, 0), _fx_catch_12);
      fx_copy_str(&v_12.t0, &uop_str_0);
      int_ pr0_2 = v_12.t1;
      FX_CALL(_fx_M2PPFM5beginv1RM1t(pp_0, 0), _fx_catch_12);
      if (pr0_2 < pr_0) {
         fx_str_t slit_10 = FX_MAKE_STR("(");
         FX_CALL(_fx_M2PPFM3strv2RM1tS(pp_0, &slit_10, 0), _fx_catch_12);
         FX_CALL(_fx_M2PPFM3cutv1RM1t(pp_0, 0), _fx_catch_12);
      }
      int tag_2 = uop_0->tag;
      bool res_3;
      if (tag_2 == 9) {
         res_3 = true;
      }
      else if (tag_2 == 10) {
         res_3 = true;
      }
      else {
         res_3 = false;
      }
      FX_CHECK_EXN(_fx_catch_12);
      if (res_3) {
         FX_CALL(_fx_M4C_ppFM8pp_cexp_v3R5PP__tN14C_form__cexp_ti(pp_0, e_1, pr0_2, 0), _fx_catch_10);
         FX_CALL(_fx_M2PPFM3strv2RM1tS(pp_0, &uop_str_0, 0), _fx_catch_10);

      _fx_catch_10: ;
         goto _fx_endmatch_3;
      }
      FX_CALL(_fx_M2PPFM3strv2RM1tS(pp_0, &uop_str_0, 0), _fx_catch_11);
      FX_CALL(_fx_M4C_ppFM8pp_cexp_v3R5PP__tN14C_form__cexp_ti(pp_0, e_1, pr0_2, 0), _fx_catch_11);

   _fx_catch_11: ;

   _fx_endmatch_3: ;
      FX_CHECK_EXN(_fx_catch_12);
      if (pr0_2 < pr_0) {
         FX_CALL(_fx_M2PPFM3cutv1RM1t(pp_0, 0), _fx_catch_12);
         fx_str_t slit_11 = FX_MAKE_STR(")");
         FX_CALL(_fx_M2PPFM3strv2RM1tS(pp_0, &slit_11, 0), _fx_catch_12);
      }
      FX_CALL(_fx_M2PPFM3endv1RM1t(pp_0, 0), _fx_catch_12);

   _fx_catch_12: ;
      FX_FREE_STR(&uop_str_0);
      _fx_free_T3SiN13C_pp__assoc_t(&v_12);
      goto _fx_endmatch_4;
   }
   if (tag_0 == 5) {
      _fx_T3N14C_form__cexp_tR9Ast__id_tT2N14C_form__ctyp_tR10Ast__loc_t* vcase_6 = &e_0->u.CExpMem;
      FX_CALL(_fx_M4C_ppFM8pp_cexp_v3R5PP__tN14C_form__cexp_ti(pp_0, vcase_6->t0, 1400, 0), _fx_catch_13);
      fx_str_t slit_12 = FX_MAKE_STR(".");
      FX_CALL(_fx_M2PPFM3strv2RM1tS(pp_0, &slit_12, 0), _fx_catch_13);
      FX_CALL(_fx_M4C_ppFM5pp_idv3R5PP__tR9Ast__id_tR10Ast__loc_t(pp_0, &vcase_6->t1, &vcase_6->t2.t1, 0), _fx_catch_13);

   _fx_catch_13: ;
      goto _fx_endmatch_4;
   }
   if (tag_0 == 6) {
      _fx_T3N14C_form__cexp_tR9Ast__id_tT2N14C_form__ctyp_tR10Ast__loc_t* vcase_7 = &e_0->u.CExpArrow;
      FX_CALL(_fx_M4C_ppFM8pp_cexp_v3R5PP__tN14C_form__cexp_ti(pp_0, vcase_7->t0, 1400, 0), _fx_catch_14);
      fx_str_t slit_13 = FX_MAKE_STR("->");
      FX_CALL(_fx_M2PPFM3strv2RM1tS(pp_0, &slit_13, 0), _fx_catch_14);
      FX_CALL(_fx_M4C_ppFM5pp_idv3R5PP__tR9Ast__id_tR10Ast__loc_t(pp_0, &vcase_7->t1, &vcase_7->t2.t1, 0), _fx_catch_14);

   _fx_catch_14: ;
      goto _fx_endmatch_4;
   }
   if (tag_0 == 7) {
      _fx_T3N14C_form__cexp_tN14C_form__ctyp_tR10Ast__loc_t* vcase_8 = &e_0->u.CExpCast;
      FX_CALL(_fx_M2PPFM5beginv1RM1t(pp_0, 0), _fx_catch_15);
      fx_str_t slit_14 = FX_MAKE_STR("(");
      FX_CALL(_fx_M2PPFM3strv2RM1tS(pp_0, &slit_14, 0), _fx_catch_15);
      FX_CALL(
         _fx_M4C_ppFM8pp_ctyp_v4R5PP__tN14C_form__ctyp_tNt6option1R9Ast__id_tR10Ast__loc_t(pp_0, vcase_8->t1,
            &_fx_g10C_pp__None, &vcase_8->t2, 0), _fx_catch_15);
      fx_str_t slit_15 = FX_MAKE_STR(")");
      FX_CALL(_fx_M2PPFM3strv2RM1tS(pp_0, &slit_15, 0), _fx_catch_15);
      FX_CALL(_fx_M2PPFM3cutv1RM1t(pp_0, 0), _fx_catch_15);
      FX_CALL(_fx_M4C_ppFM8pp_cexp_v3R5PP__tN14C_form__cexp_ti(pp_0, vcase_8->t0, 1301, 0), _fx_catch_15);
      FX_CALL(_fx_M2PPFM3endv1RM1t(pp_0, 0), _fx_catch_15);

   _fx_catch_15: ;
      goto _fx_endmatch_4;
   }
   if (tag_0 == 8) {
      _fx_T4N14C_form__cexp_tN14C_form__cexp_tN14C_form__cexp_tT2N14C_form__ctyp_tR10Ast__loc_t* vcase_9 = &e_0->u.CExpTernary;
      FX_CALL(_fx_M2PPFM5beginv1RM1t(pp_0, 0), _fx_catch_16);
      if (200 < pr_0) {
         fx_str_t slit_16 = FX_MAKE_STR("(");
         FX_CALL(_fx_M2PPFM3strv2RM1tS(pp_0, &slit_16, 0), _fx_catch_16);
         FX_CALL(_fx_M2PPFM3cutv1RM1t(pp_0, 0), _fx_catch_16);
      }
      FX_CALL(_fx_M4C_ppFM8pp_cexp_v3R5PP__tN14C_form__cexp_ti(pp_0, vcase_9->t0, 0, 0), _fx_catch_16);
      FX_CALL(_fx_M2PPFM5spacev1RM1t(pp_0, 0), _fx_catch_16);
      fx_str_t slit_17 = FX_MAKE_STR("?");
      FX_CALL(_fx_M2PPFM3strv2RM1tS(pp_0, &slit_17, 0), _fx_catch_16);
      FX_CALL(_fx_M2PPFM5spacev1RM1t(pp_0, 0), _fx_catch_16);
      FX_CALL(_fx_M4C_ppFM8pp_cexp_v3R5PP__tN14C_form__cexp_ti(pp_0, vcase_9->t1, 0, 0), _fx_catch_16);
      FX_CALL(_fx_M2PPFM5spacev1RM1t(pp_0, 0), _fx_catch_16);
      fx_str_t slit_18 = FX_MAKE_STR(":");
      FX_CALL(_fx_M2PPFM3strv2RM1tS(pp_0, &slit_18, 0), _fx_catch_16);
      FX_CALL(_fx_M2PPFM5spacev1RM1t(pp_0, 0), _fx_catch_16);
      FX_CALL(_fx_M4C_ppFM8pp_cexp_v3R5PP__tN14C_form__cexp_ti(pp_0, vcase_9->t2, 0, 0), _fx_catch_16);
      if (200 < pr_0) {
         FX_CALL(_fx_M2PPFM3cutv1RM1t(pp_0, 0), _fx_catch_16);
         fx_str_t slit_19 = FX_MAKE_STR(")");
         FX_CALL(_fx_M2PPFM3strv2RM1tS(pp_0, &slit_19, 0), _fx_catch_16);
      }
      FX_CALL(_fx_M2PPFM3endv1RM1t(pp_0, 0), _fx_catch_16);

   _fx_catch_16: ;
      goto _fx_endmatch_4;
   }
   if (tag_0 == 9) {
      _fx_T3N14C_form__cexp_tLN14C_form__cexp_tT2N14C_form__ctyp_tR10Ast__loc_t* vcase_10 = &e_0->u.CExpCall;
      FX_CALL(_fx_M2PPFM5beginv1RM1t(pp_0, 0), _fx_catch_17);
      FX_CALL(_fx_M4C_ppFM8pp_cexp_v3R5PP__tN14C_form__cexp_ti(pp_0, vcase_10->t0, 1400, 0), _fx_catch_17);
      fx_str_t slit_20 = FX_MAKE_STR("(");
      FX_CALL(_fx_M2PPFM3strv2RM1tS(pp_0, &slit_20, 0), _fx_catch_17);
      FX_CALL(_fx_M2PPFM3cutv1RM1t(pp_0, 0), _fx_catch_17);
      FX_CALL(_fx_M4C_ppFM8pp_elistv2R5PP__tLN14C_form__cexp_t(pp_0, vcase_10->t1, 0), _fx_catch_17);
      fx_str_t slit_21 = FX_MAKE_STR(")");
      FX_CALL(_fx_M2PPFM3strv2RM1tS(pp_0, &slit_21, 0), _fx_catch_17);
      FX_CALL(_fx_M2PPFM3endv1RM1t(pp_0, 0), _fx_catch_17);

   _fx_catch_17: ;
      goto _fx_endmatch_4;
   }
   if (tag_0 == 10) {
      _fx_LN14C_form__cexp_t eseq_0 = 0;
      _fx_LN14C_form__cexp_t eseq_1 = e_0->u.CExpInit.t0;
      if (eseq_1 != 0) {
         FX_CALL(_fx_M2PPFM5beginv1RM1t(pp_0, 0), _fx_catch_19);
         fx_str_t slit_22 = FX_MAKE_STR("{");
         FX_CALL(_fx_M2PPFM3strv2RM1tS(pp_0, &slit_22, 0), _fx_catch_19);
         FX_CALL(_fx_M2PPFM5spacev1RM1t(pp_0, 0), _fx_catch_19);
         int_ i_1 = 0;
         FX_COPY_PTR(eseq_1, &eseq_0);
         _fx_LN14C_form__cexp_t lst_1 = eseq_0;
         for (; lst_1; lst_1 = lst_1->tl, i_1 += 1) {
            _fx_N14C_form__cexp_t e_2 = lst_1->hd;
            if (i_1 > 0) {
               fx_str_t slit_23 = FX_MAKE_STR(",");
               FX_CALL(_fx_M2PPFM3strv2RM1tS(pp_0, &slit_23, 0), _fx_catch_18);
               FX_CALL(_fx_M2PPFM5spacev1RM1t(pp_0, 0), _fx_catch_18);
            }
            FX_CALL(_fx_M4C_ppFM8pp_cexp_v3R5PP__tN14C_form__cexp_ti(pp_0, e_2, 0, 0), _fx_catch_18);

         _fx_catch_18: ;
            FX_CHECK_EXN(_fx_catch_19);
         }
         FX_CALL(_fx_M2PPFM3endv1RM1t(pp_0, 0), _fx_catch_19);
         FX_CALL(_fx_M2PPFM5spacev1RM1t(pp_0, 0), _fx_catch_19);
         fx_str_t slit_24 = FX_MAKE_STR("}");
         FX_CALL(_fx_M2PPFM3strv2RM1tS(pp_0, &slit_24, 0), _fx_catch_19);
      }
      else {
         fx_str_t slit_25 = FX_MAKE_STR("{0}"); FX_CALL(_fx_M2PPFM3strv2RM1tS(pp_0, &slit_25, 0), _fx_catch_19);
      }

   _fx_catch_19: ;
      if (eseq_0) {
         _fx_free_LN14C_form__cexp_t(&eseq_0);
      }
      goto _fx_endmatch_4;
   }
   if (tag_0 == 11) {
      _fx_T2N14C_form__ctyp_tR10Ast__loc_t* vcase_11 = &e_0->u.CExpTyp;
      FX_CALL(_fx_M2PPFM5beginv1RM1t(pp_0, 0), _fx_catch_20);
      FX_CALL(
         _fx_M4C_ppFM8pp_ctyp_v4R5PP__tN14C_form__ctyp_tNt6option1R9Ast__id_tR10Ast__loc_t(pp_0, vcase_11->t0,
            &_fx_g10C_pp__None, &vcase_11->t1, 0), _fx_catch_20);
      FX_CALL(_fx_M2PPFM3endv1RM1t(pp_0, 0), _fx_catch_20);

   _fx_catch_20: ;
      goto _fx_endmatch_4;
   }
   if (tag_0 == 12) {
      fx_str_t v_13 = {0};
      fx_str_t v_14 = {0};
      FX_CALL(_fx_M2PPFM5beginv1RM1t(pp_0, 0), _fx_catch_21);
      FX_CALL(_fx_M6StringFM5stripS1S(&e_0->u.CExpCCode.t0, &v_13, 0), _fx_catch_21);
      fx_str_t slit_26 = FX_MAKE_STR("\n");
      fx_str_t slit_27 = FX_MAKE_STR("\n");
      {
         const fx_str_t strs_4[] = { slit_26, v_13, slit_27 };
         FX_CALL(fx_strjoin(0, 0, 0, strs_4, 3, &v_14), _fx_catch_21);
      }
      FX_CALL(_fx_M2PPFM3strv2RM1tS(pp_0, &v_14, 0), _fx_catch_21);
      FX_CALL(_fx_M2PPFM3endv1RM1t(pp_0, 0), _fx_catch_21);

   _fx_catch_21: ;
      FX_FREE_STR(&v_14);
      FX_FREE_STR(&v_13);
      goto _fx_endmatch_4;
   }
   FX_FAST_THROW(FX_EXN_NoMatchError, _fx_cleanup);

_fx_endmatch_4: ;

_fx_cleanup: ;
   return fx_status;
}

FX_EXTERN_C int _fx_M4C_ppFM8pp_elistv2R5PP__tLN14C_form__cexp_t(
   struct _fx_R5PP__t* pp_0,
   struct _fx_LN14C_form__cexp_t_data_t* el_0,
   void* fx_fv)
{
   int fx_status = 0;
   FX_CALL(fx_check_stack(), _fx_cleanup);
   int_ i_0 = 0;
   _fx_LN14C_form__cexp_t lst_0 = el_0;
   for (; lst_0; lst_0 = lst_0->tl, i_0 += 1) {
      _fx_N14C_form__cexp_t e_0 = lst_0->hd;
      if (i_0 > 0) {
         fx_str_t slit_0 = FX_MAKE_STR(",");
         FX_CALL(_fx_M2PPFM3strv2RM1tS(pp_0, &slit_0, 0), _fx_catch_0);
         FX_CALL(_fx_M2PPFM5spacev1RM1t(pp_0, 0), _fx_catch_0);
      }
      FX_CALL(_fx_M4C_ppFM8pp_cexp_v3R5PP__tN14C_form__cexp_ti(pp_0, e_0, 0, 0), _fx_catch_0);

   _fx_catch_0: ;
      FX_CHECK_EXN(_fx_cleanup);
   }

_fx_cleanup: ;
   return fx_status;
}

FX_EXTERN_C int _fx_M4C_ppFM14pprint_fun_hdrv5R5PP__tR9Ast__id_tBR10Ast__loc_tB(
   struct _fx_R5PP__t* pp_0,
   struct _fx_R9Ast__id_t* fname_0,
   bool semicolon_0,
   struct _fx_R10Ast__loc_t* loc_0,
   bool fwd_mode_0,
   void* fx_fv)
{
   _fx_N15C_form__cinfo_t v_0 = {0};
   _fx_R17C_form__cdeffun_t v_1 = {0};
   fx_str_t cf_cname_0 = {0};
   _fx_N14C_form__ctyp_t cf_rt_0 = 0;
   _fx_LT3R9Ast__id_tN14C_form__ctyp_tLN19C_form__carg_attr_t cf_args_0 = 0;
   fx_str_t v_2 = {0};
   fx_str_t v_3 = {0};
   int fx_status = 0;
   FX_CALL(_fx_M6C_formFM6cinfo_N15C_form__cinfo_t2R9Ast__id_tR10Ast__loc_t(fname_0, loc_0, &v_0, 0), _fx_cleanup);
   if (v_0.tag == 3) {
      _fx_copy_R17C_form__cdeffun_t(&v_0.u.CFun->data, &v_1);
   }
   else {
      fx_str_t v_4 = {0};
      fx_str_t v_5 = {0};
      fx_exn_t v_6 = {0};
      FX_CALL(_fx_M6C_formFM7idc2strS2R9Ast__id_tR10Ast__loc_t(fname_0, loc_0, &v_4, 0), _fx_catch_0);
      fx_str_t slit_0 = FX_MAKE_STR("the forward declaration of ");
      fx_str_t slit_1 = FX_MAKE_STR(" does not reference a function");
      {
         const fx_str_t strs_0[] = { slit_0, v_4, slit_1 };
         FX_CALL(fx_strjoin(0, 0, 0, strs_0, 3, &v_5), _fx_catch_0);
      }
      FX_CALL(_fx_M3AstFM11compile_errE2RM5loc_tS(loc_0, &v_5, &v_6, 0), _fx_catch_0);
      FX_THROW(&v_6, false, _fx_catch_0);

   _fx_catch_0: ;
      fx_free_exn(&v_6);
      FX_FREE_STR(&v_5);
      FX_FREE_STR(&v_4);
   }
   FX_CHECK_EXN(_fx_cleanup);
   _fx_R10Ast__loc_t cf_loc_0 = v_1.cf_loc;
   _fx_R16Ast__fun_flags_t cf_flags_0 = v_1.cf_flags;
   fx_copy_str(&v_1.cf_cname, &cf_cname_0);
   FX_COPY_PTR(v_1.cf_rt, &cf_rt_0);
   FX_COPY_PTR(v_1.cf_args, &cf_args_0);
   FX_CALL(_fx_M2PPFM6beginvv1RM1t(pp_0, 0), _fx_cleanup);
   FX_CALL(_fx_M2PPFM5beginv1RM1t(pp_0, 0), _fx_cleanup);
   if (cf_flags_0.fun_flag_private) {
      fx_str_t slit_2 = FX_MAKE_STR("static "); FX_CALL(_fx_M2PPFM3strv2RM1tS(pp_0, &slit_2, 0), _fx_cleanup);
   }
   else {
      fx_str_t slit_3 = FX_MAKE_STR("FX_EXTERN_C "); FX_CALL(_fx_M2PPFM3strv2RM1tS(pp_0, &slit_3, 0), _fx_cleanup);
   }
   fx_str_t slit_4 = FX_MAKE_STR("");
   fx_str_t slit_5 = FX_MAKE_STR("");
   FX_CALL(
      _fx_M4C_ppFM9pp_ctyp__v7R5PP__tSSN14C_form__ctyp_tNt6option1R9Ast__id_tBR10Ast__loc_t(pp_0, &slit_4, &slit_5, cf_rt_0,
         &_fx_g10C_pp__None, false, &cf_loc_0, 0), _fx_cleanup);
   FX_CALL(_fx_M2PPFM5spacev1RM1t(pp_0, 0), _fx_cleanup);
   FX_CALL(_fx_M2PPFM3strv2RM1tS(pp_0, &cf_cname_0, 0), _fx_cleanup);
   fx_str_t slit_6 = FX_MAKE_STR("(");
   FX_CALL(_fx_M2PPFM3strv2RM1tS(pp_0, &slit_6, 0), _fx_cleanup);
   FX_CALL(_fx_M2PPFM3endv1RM1t(pp_0, 0), _fx_cleanup);
   FX_CALL(_fx_M2PPFM3cutv1RM1t(pp_0, 0), _fx_cleanup);
   if (cf_args_0 == 0) {
      fx_str_t slit_7 = FX_MAKE_STR("void");
      FX_CALL(_fx_M2PPFM3strv2RM1tS(pp_0, &slit_7, 0), _fx_catch_1);
      FX_CALL(_fx_M2PPFM3cutv1RM1t(pp_0, 0), _fx_catch_1);

   _fx_catch_1: ;
   }
   else {
      int_ nargs_0 = _fx_M4C_ppFM6lengthi1LT3R9Ast__id_tN14C_form__ctyp_tLN19C_form__carg_attr_t(cf_args_0, 0);
      int_ i_0 = 0;
      _fx_LT3R9Ast__id_tN14C_form__ctyp_tLN19C_form__carg_attr_t lst_0 = cf_args_0;
      for (; lst_0; lst_0 = lst_0->tl, i_0 += 1) {
         _fx_N14C_form__ctyp_t t_0 = 0;
         fx_str_t v_7 = {0};
         _fx_T3R9Ast__id_tN14C_form__ctyp_tLN19C_form__carg_attr_t* __pat___0 = &lst_0->hd;
         _fx_R9Ast__id_t n_0 = __pat___0->t0;
         FX_COPY_PTR(__pat___0->t1, &t_0);
         bool last_0 = i_0 == nargs_0 - 1;
         if (last_0) {
            fx_str_t slit_8 = FX_MAKE_STR(""); fx_copy_str(&slit_8, &v_7);
         }
         else {
            fx_str_t slit_9 = FX_MAKE_STR(","); fx_copy_str(&slit_9, &v_7);
         }
         _fx_Nt6option1R9Ast__id_t v_8;
         _fx_M4C_ppFM4SomeNt6option1R9Ast__id_t1R9Ast__id_t(&n_0, &v_8);
         fx_str_t slit_10 = FX_MAKE_STR("");
         FX_CALL(
            _fx_M4C_ppFM9pp_ctyp__v7R5PP__tSSN14C_form__ctyp_tNt6option1R9Ast__id_tBR10Ast__loc_t(pp_0, &slit_10, &v_7, t_0,
               &v_8, true, &cf_loc_0, 0), _fx_catch_2);
         if (!last_0) {
            FX_CALL(_fx_M2PPFM5spacev1RM1t(pp_0, 0), _fx_catch_2);
         }

      _fx_catch_2: ;
         FX_FREE_STR(&v_7);
         if (t_0) {
            _fx_free_N14C_form__ctyp_t(&t_0);
         }
         FX_CHECK_EXN(_fx_catch_3);
      }

   _fx_catch_3: ;
   }
   FX_CHECK_EXN(_fx_cleanup);
   if (semicolon_0) {
      fx_str_t slit_11 = FX_MAKE_STR(";"); fx_copy_str(&slit_11, &v_2);
   }
   else {
      fx_str_t slit_12 = FX_MAKE_STR(""); fx_copy_str(&slit_12, &v_2);
   }
   fx_str_t slit_13 = FX_MAKE_STR(")");
   {
      const fx_str_t strs_1[] = { slit_13, v_2 };
      FX_CALL(fx_strjoin(0, 0, 0, strs_1, 2, &v_3), _fx_cleanup);
   }
   FX_CALL(_fx_M2PPFM3strv2RM1tS(pp_0, &v_3, 0), _fx_cleanup);
   FX_CALL(_fx_M2PPFM3endv1RM1t(pp_0, 0), _fx_cleanup);
   FX_CALL(_fx_M2PPFM6break0v1RM1t(pp_0, 0), _fx_cleanup);

_fx_cleanup: ;
   _fx_free_N15C_form__cinfo_t(&v_0);
   _fx_free_R17C_form__cdeffun_t(&v_1);
   FX_FREE_STR(&cf_cname_0);
   if (cf_rt_0) {
      _fx_free_N14C_form__ctyp_t(&cf_rt_0);
   }
   if (cf_args_0) {
      _fx_free_LT3R9Ast__id_tN14C_form__ctyp_tLN19C_form__carg_attr_t(&cf_args_0);
   }
   FX_FREE_STR(&v_2);
   FX_FREE_STR(&v_3);
   return fx_status;
}

FX_EXTERN_C int _fx_M4C_ppFM26pprint_cstmt_or_block_cboxv2R5PP__tN15C_form__cstmt_t(
   struct _fx_R5PP__t* pp_0,
   struct _fx_N15C_form__cstmt_t_data_t* s_0,
   void* fx_fv)
{
   _fx_LN15C_form__cstmt_t sl_0 = 0;
   int fx_status = 0;
   FX_CALL(fx_check_stack(), _fx_cleanup);
   int tag_0 = FX_REC_VARIANT_TAG(s_0);
   if (tag_0 == 7) {
      FX_COPY_PTR(s_0->u.CStmtBlock.t0, &sl_0);
   }
   else if (tag_0 != 1) {
      FX_CALL(_fx_cons_LN15C_form__cstmt_t(s_0, 0, true, &sl_0), _fx_catch_0);  _fx_catch_0: ;
   }
   FX_CHECK_EXN(_fx_cleanup);
   fx_str_t slit_0 = FX_MAKE_STR("{");
   FX_CALL(_fx_M2PPFM3strv2RM1tS(pp_0, &slit_0, 0), _fx_cleanup);
   FX_CALL(_fx_M2PPFM7newlinev1RM1t(pp_0, 0), _fx_cleanup);
   FX_CALL(_fx_M2PPFM6beginvv2RM1ti(pp_0, 0, 0), _fx_cleanup);
   int_ i_0 = 0;
   _fx_LN15C_form__cstmt_t lst_0 = sl_0;
   for (; lst_0; lst_0 = lst_0->tl, i_0 += 1) {
      _fx_N15C_form__cstmt_t s_1 = lst_0->hd;
      if (i_0 > 0) {
         FX_CALL(_fx_M2PPFM6break0v1RM1t(pp_0, 0), _fx_catch_1);
      }
      FX_CALL(_fx_M4C_ppFM9pp_cstmt_v2R5PP__tN15C_form__cstmt_t(pp_0, s_1, 0), _fx_catch_1);

   _fx_catch_1: ;
      FX_CHECK_EXN(_fx_cleanup);
   }
   FX_CALL(_fx_M2PPFM3endv1RM1t(pp_0, 0), _fx_cleanup);
   FX_CALL(_fx_M2PPFM3endv1RM1t(pp_0, 0), _fx_cleanup);
   FX_CALL(_fx_M2PPFM6break0v1RM1t(pp_0, 0), _fx_cleanup);
   fx_str_t slit_1 = FX_MAKE_STR("}");
   FX_CALL(_fx_M2PPFM3strv2RM1tS(pp_0, &slit_1, 0), _fx_cleanup);

_fx_cleanup: ;
   if (sl_0) {
      _fx_free_LN15C_form__cstmt_t(&sl_0);
   }
   return fx_status;
}

FX_EXTERN_C int _fx_M4C_ppFM21pprint_cstmt_as_blockv2R5PP__tN15C_form__cstmt_t(
   struct _fx_R5PP__t* pp_0,
   struct _fx_N15C_form__cstmt_t_data_t* s_0,
   void* fx_fv)
{
   _fx_LN15C_form__cstmt_t sl_0 = 0;
   int fx_status = 0;
   FX_CALL(fx_check_stack(), _fx_cleanup);
   int tag_0 = FX_REC_VARIANT_TAG(s_0);
   if (tag_0 == 7) {
      FX_COPY_PTR(s_0->u.CStmtBlock.t0, &sl_0);
   }
   else if (tag_0 != 1) {
      FX_CALL(_fx_cons_LN15C_form__cstmt_t(s_0, 0, true, &sl_0), _fx_catch_0);  _fx_catch_0: ;
   }
   FX_CHECK_EXN(_fx_cleanup);
   if (sl_0 == 0) {
      fx_str_t slit_0 = FX_MAKE_STR("{}"); FX_CALL(_fx_M2PPFM3strv2RM1tS(pp_0, &slit_0, 0), _fx_catch_1);  _fx_catch_1: ;
   }
   else {
      FX_CALL(_fx_M2PPFM6beginvv1RM1t(pp_0, 0), _fx_catch_3);
      fx_str_t slit_1 = FX_MAKE_STR("{");
      FX_CALL(_fx_M2PPFM3strv2RM1tS(pp_0, &slit_1, 0), _fx_catch_3);
      int_ i_0 = 0;
      _fx_LN15C_form__cstmt_t lst_0 = sl_0;
      for (; lst_0; lst_0 = lst_0->tl, i_0 += 1) {
         _fx_N15C_form__cstmt_t s_1 = lst_0->hd;
         FX_CALL(_fx_M2PPFM7newlinev1RM1t(pp_0, 0), _fx_catch_2);
         FX_CALL(_fx_M4C_ppFM9pp_cstmt_v2R5PP__tN15C_form__cstmt_t(pp_0, s_1, 0), _fx_catch_2);

      _fx_catch_2: ;
         FX_CHECK_EXN(_fx_catch_3);
      }
      FX_CALL(_fx_M2PPFM3endv1RM1t(pp_0, 0), _fx_catch_3);
      FX_CALL(_fx_M2PPFM6break0v1RM1t(pp_0, 0), _fx_catch_3);
      fx_str_t slit_2 = FX_MAKE_STR("}");
      FX_CALL(_fx_M2PPFM3strv2RM1tS(pp_0, &slit_2, 0), _fx_catch_3);

   _fx_catch_3: ;
   }

_fx_cleanup: ;
   if (sl_0) {
      _fx_free_LN15C_form__cstmt_t(&sl_0);
   }
   return fx_status;
}

FX_EXTERN_C int _fx_M4C_ppFM9pp_cstmt_v2R5PP__tN15C_form__cstmt_t(
   struct _fx_R5PP__t* pp_0,
   struct _fx_N15C_form__cstmt_t_data_t* s_0,
   void* fx_fv)
{
   int fx_status = 0;
   FX_CALL(fx_check_stack(), _fx_cleanup);
   int tag_0 = FX_REC_VARIANT_TAG(s_0);
   if (tag_0 == 1) {
      fx_str_t slit_0 = FX_MAKE_STR("{}"); FX_CALL(_fx_M2PPFM3strv2RM1tS(pp_0, &slit_0, 0), _fx_catch_0);  _fx_catch_0: ;
   }
   else if (tag_0 == 2) {
      FX_CALL(_fx_M2PPFM3strv2RM1tS(pp_0, &s_0->u.CComment.t0, 0), _fx_catch_1);  _fx_catch_1: ;
   }
   else if (tag_0 == 3) {
      _fx_N14C_form__cexp_t e_0 = s_0->u.CExp;
      FX_CALL(_fx_M4C_ppFM8pp_cexp_v3R5PP__tN14C_form__cexp_ti(pp_0, e_0, 0, 0), _fx_catch_3);
      if (FX_REC_VARIANT_TAG(e_0) != 12) {
         fx_str_t slit_1 = FX_MAKE_STR(";"); FX_CALL(_fx_M2PPFM3strv2RM1tS(pp_0, &slit_1, 0), _fx_catch_2);  _fx_catch_2: ;
      }
      FX_CHECK_EXN(_fx_catch_3);

   _fx_catch_3: ;
   }
   else if (tag_0 == 4) {
      fx_str_t slit_2 = FX_MAKE_STR("break;"); FX_CALL(_fx_M2PPFM3strv2RM1tS(pp_0, &slit_2, 0), _fx_catch_4);  _fx_catch_4: ;
   }
   else if (tag_0 == 5) {
      fx_str_t slit_3 = FX_MAKE_STR("continue;"); FX_CALL(_fx_M2PPFM3strv2RM1tS(pp_0, &slit_3, 0), _fx_catch_5);  _fx_catch_5: ;
   }
   else if (tag_0 == 6) {
      _fx_Nt6option1N14C_form__cexp_t* e_opt_0 = &s_0->u.CStmtReturn.t0;
      FX_CALL(_fx_M2PPFM5beginv1RM1t(pp_0, 0), _fx_catch_7);
      fx_str_t slit_4 = FX_MAKE_STR("return");
      FX_CALL(_fx_M2PPFM3strv2RM1tS(pp_0, &slit_4, 0), _fx_catch_7);
      if (e_opt_0->tag == 2) {
         FX_CALL(_fx_M2PPFM5spacev1RM1t(pp_0, 0), _fx_catch_6);
         FX_CALL(_fx_M4C_ppFM8pp_cexp_v3R5PP__tN14C_form__cexp_ti(pp_0, e_opt_0->u.Some, 0, 0), _fx_catch_6);

      _fx_catch_6: ;
      }
      FX_CHECK_EXN(_fx_catch_7);
      fx_str_t slit_5 = FX_MAKE_STR(";");
      FX_CALL(_fx_M2PPFM3strv2RM1tS(pp_0, &slit_5, 0), _fx_catch_7);
      FX_CALL(_fx_M2PPFM3endv1RM1t(pp_0, 0), _fx_catch_7);

   _fx_catch_7: ;
   }
   else if (tag_0 == 7) {
      FX_CALL(_fx_M4C_ppFM21pprint_cstmt_as_blockv2R5PP__tN15C_form__cstmt_t(pp_0, s_0, 0), _fx_catch_8);  _fx_catch_8: ;
   }
   else if (tag_0 == 8) {
      fx_str_t v_0 = {0};
      fx_str_t nstr_0 = {0};
      fx_str_t v_1 = {0};
      fx_str_t v_2 = {0};
      _fx_T2R9Ast__id_tN15C_form__cstmt_t* vcase_0 = &s_0->u.CStmtSync;
      _fx_R9Ast__id_t* n_0 = &vcase_0->t0;
      if (_fx_g12Options__opt.enable_openmp) {
         FX_CALL(_fx_M2PPFM7newlinev1RM1t(pp_0, 0), _fx_catch_9);
         fx_str_t slit_6 = FX_MAKE_STR("#pragma omp critical");
         FX_CALL(_fx_M2PPFM3strv2RM1tS(pp_0, &slit_6, 0), _fx_catch_9);
         bool res_0;
         FX_CALL(_fx_M4C_ppFM6__ne__B2R9Ast__id_tR9Ast__id_t(n_0, &_fx_g9Ast__noid, &res_0, 0), _fx_catch_9);
         if (res_0) {
            FX_CALL(_fx_M3AstFM2ppS1RM4id_t(n_0, &v_0, 0), _fx_catch_9);
            fx_str_t slit_7 = FX_MAKE_STR(".");
            fx_str_t slit_8 = FX_MAKE_STR("__");
            FX_CALL(_fx_M6StringFM7replaceS3SSS(&v_0, &slit_7, &slit_8, &nstr_0, 0), _fx_catch_9);
            FX_CALL(_fx_M4C_ppFM6stringS1S(&nstr_0, &v_1, 0), _fx_catch_9);
            fx_str_t slit_9 = FX_MAKE_STR(" (");
            fx_str_t slit_10 = FX_MAKE_STR(")");
            {
               const fx_str_t strs_0[] = { slit_9, v_1, slit_10 };
               FX_CALL(fx_strjoin(0, 0, 0, strs_0, 3, &v_2), _fx_catch_9);
            }
            FX_CALL(_fx_M2PPFM3strv2RM1tS(pp_0, &v_2, 0), _fx_catch_9);
         }
         FX_CALL(_fx_M2PPFM7newlinev1RM1t(pp_0, 0), _fx_catch_9);
      }
      FX_CALL(_fx_M4C_ppFM21pprint_cstmt_as_blockv2R5PP__tN15C_form__cstmt_t(pp_0, vcase_0->t1, 0), _fx_catch_9);

   _fx_catch_9: ;
      FX_FREE_STR(&v_2);
      FX_FREE_STR(&v_1);
      FX_FREE_STR(&nstr_0);
      FX_FREE_STR(&v_0);
   }
   else if (tag_0 == 9) {
      _fx_T4N14C_form__cexp_tN15C_form__cstmt_tN15C_form__cstmt_tR10Ast__loc_t* vcase_1 = &s_0->u.CStmtIf;
      fx_str_t slit_11 = FX_MAKE_STR("if");
      FX_CALL(
         _fx_M4C_ppFM16print_cascade_ifv5SN14C_form__cexp_tN15C_form__cstmt_tN15C_form__cstmt_tR5PP__t(&slit_11, vcase_1->t0,
            vcase_1->t1, vcase_1->t2, pp_0, 0), _fx_catch_10);

   _fx_catch_10: ;
   }
   else if (tag_0 == 10) {
      _fx_T2R9Ast__id_tR10Ast__loc_t* vcase_2 = &s_0->u.CStmtGoto;
      FX_CALL(_fx_M2PPFM5beginv1RM1t(pp_0, 0), _fx_catch_11);
      fx_str_t slit_12 = FX_MAKE_STR("goto");
      FX_CALL(_fx_M2PPFM3strv2RM1tS(pp_0, &slit_12, 0), _fx_catch_11);
      FX_CALL(_fx_M2PPFM5spacev1RM1t(pp_0, 0), _fx_catch_11);
      FX_CALL(_fx_M4C_ppFM5pp_idv3R5PP__tR9Ast__id_tR10Ast__loc_t(pp_0, &vcase_2->t0, &vcase_2->t1, 0), _fx_catch_11);
      fx_str_t slit_13 = FX_MAKE_STR(";");
      FX_CALL(_fx_M2PPFM3strv2RM1tS(pp_0, &slit_13, 0), _fx_catch_11);
      FX_CALL(_fx_M2PPFM3endv1RM1t(pp_0, 0), _fx_catch_11);

   _fx_catch_11: ;
   }
   else if (tag_0 == 11) {
      _fx_T2R9Ast__id_tR10Ast__loc_t* vcase_3 = &s_0->u.CStmtLabel;
      FX_CALL(_fx_M2PPFM6breakuv1RM1t(pp_0, 0), _fx_catch_12);
      FX_CALL(_fx_M4C_ppFM5pp_idv3R5PP__tR9Ast__id_tR10Ast__loc_t(pp_0, &vcase_3->t0, &vcase_3->t1, 0), _fx_catch_12);
      fx_str_t slit_14 = FX_MAKE_STR(": ;");
      FX_CALL(_fx_M2PPFM3strv2RM1tS(pp_0, &slit_14, 0), _fx_catch_12);

   _fx_catch_12: ;
   }
   else if (tag_0 == 12) {
      _fx_T6Nt6option1N14C_form__ctyp_tLN14C_form__cexp_tNt6option1N14C_form__cexp_tLN14C_form__cexp_tN15C_form__cstmt_tR10Ast__loc_t*
         vcase_4 = &s_0->u.CStmtFor;
      _fx_LN14C_form__cexp_t e3_0 = vcase_4->t3;
      _fx_Nt6option1N14C_form__cexp_t* e2_opt_0 = &vcase_4->t2;
      _fx_LN14C_form__cexp_t e1_0 = vcase_4->t1;
      _fx_Nt6option1N14C_form__ctyp_t* t_opt_0 = &vcase_4->t0;
      FX_CALL(_fx_M2PPFM5beginv1RM1t(pp_0, 0), _fx_catch_17);
      fx_str_t slit_15 = FX_MAKE_STR("for (");
      FX_CALL(_fx_M2PPFM3strv2RM1tS(pp_0, &slit_15, 0), _fx_catch_17);
      FX_CALL(_fx_M2PPFM3cutv1RM1t(pp_0, 0), _fx_catch_17);
      if (e1_0 != 0) {
         if (t_opt_0->tag == 2) {
            FX_CALL(
               _fx_M4C_ppFM8pp_ctyp_v4R5PP__tN14C_form__ctyp_tNt6option1R9Ast__id_tR10Ast__loc_t(pp_0, t_opt_0->u.Some,
                  &_fx_g10C_pp__None, &vcase_4->t5, 0), _fx_catch_13);
            FX_CALL(_fx_M2PPFM5spacev1RM1t(pp_0, 0), _fx_catch_13);

         _fx_catch_13: ;
         }
         FX_CHECK_EXN(_fx_catch_14);
         FX_CALL(_fx_M2PPFM5beginv1RM1t(pp_0, 0), _fx_catch_14);
         FX_CALL(_fx_M4C_ppFM8pp_elistv2R5PP__tLN14C_form__cexp_t(pp_0, e1_0, 0), _fx_catch_14);
         FX_CALL(_fx_M2PPFM3endv1RM1t(pp_0, 0), _fx_catch_14);

      _fx_catch_14: ;
      }
      FX_CHECK_EXN(_fx_catch_17);
      fx_str_t slit_16 = FX_MAKE_STR(";");
      FX_CALL(_fx_M2PPFM3strv2RM1tS(pp_0, &slit_16, 0), _fx_catch_17);
      if (e2_opt_0->tag == 2) {
         FX_CALL(_fx_M2PPFM5spacev1RM1t(pp_0, 0), _fx_catch_15);
         FX_CALL(_fx_M4C_ppFM8pp_cexp_v3R5PP__tN14C_form__cexp_ti(pp_0, e2_opt_0->u.Some, 0, 0), _fx_catch_15);

      _fx_catch_15: ;
      }
      FX_CHECK_EXN(_fx_catch_17);
      fx_str_t slit_17 = FX_MAKE_STR(";");
      FX_CALL(_fx_M2PPFM3strv2RM1tS(pp_0, &slit_17, 0), _fx_catch_17);
      if (e3_0 != 0) {
         FX_CALL(_fx_M2PPFM5spacev1RM1t(pp_0, 0), _fx_catch_16);
         FX_CALL(_fx_M2PPFM5beginv1RM1t(pp_0, 0), _fx_catch_16);
         FX_CALL(_fx_M4C_ppFM8pp_elistv2R5PP__tLN14C_form__cexp_t(pp_0, e3_0, 0), _fx_catch_16);
         FX_CALL(_fx_M2PPFM3endv1RM1t(pp_0, 0), _fx_catch_16);

      _fx_catch_16: ;
      }
      FX_CHECK_EXN(_fx_catch_17);
      FX_CALL(_fx_M2PPFM3cutv1RM1t(pp_0, 0), _fx_catch_17);
      fx_str_t slit_18 = FX_MAKE_STR(")");
      FX_CALL(_fx_M2PPFM3strv2RM1tS(pp_0, &slit_18, 0), _fx_catch_17);
      FX_CALL(_fx_M2PPFM5spacev1RM1t(pp_0, 0), _fx_catch_17);
      FX_CALL(_fx_M4C_ppFM26pprint_cstmt_or_block_cboxv2R5PP__tN15C_form__cstmt_t(pp_0, vcase_4->t4, 0), _fx_catch_17);

   _fx_catch_17: ;
   }
   else if (tag_0 == 13) {
      _fx_T3N14C_form__cexp_tN15C_form__cstmt_tR10Ast__loc_t* vcase_5 = &s_0->u.CStmtWhile;
      FX_CALL(_fx_M2PPFM5beginv1RM1t(pp_0, 0), _fx_catch_18);
      fx_str_t slit_19 = FX_MAKE_STR("while (");
      FX_CALL(_fx_M2PPFM3strv2RM1tS(pp_0, &slit_19, 0), _fx_catch_18);
      FX_CALL(_fx_M2PPFM3cutv1RM1t(pp_0, 0), _fx_catch_18);
      FX_CALL(_fx_M4C_ppFM8pp_cexp_v3R5PP__tN14C_form__cexp_ti(pp_0, vcase_5->t0, 0, 0), _fx_catch_18);
      FX_CALL(_fx_M2PPFM3cutv1RM1t(pp_0, 0), _fx_catch_18);
      fx_str_t slit_20 = FX_MAKE_STR(")");
      FX_CALL(_fx_M2PPFM3strv2RM1tS(pp_0, &slit_20, 0), _fx_catch_18);
      FX_CALL(_fx_M2PPFM5spacev1RM1t(pp_0, 0), _fx_catch_18);
      FX_CALL(_fx_M4C_ppFM26pprint_cstmt_or_block_cboxv2R5PP__tN15C_form__cstmt_t(pp_0, vcase_5->t1, 0), _fx_catch_18);

   _fx_catch_18: ;
   }
   else if (tag_0 == 14) {
      _fx_T3N15C_form__cstmt_tN14C_form__cexp_tR10Ast__loc_t* vcase_6 = &s_0->u.CStmtDoWhile;
      FX_CALL(_fx_M2PPFM5beginv1RM1t(pp_0, 0), _fx_catch_19);
      fx_str_t slit_21 = FX_MAKE_STR("do");
      FX_CALL(_fx_M2PPFM3strv2RM1tS(pp_0, &slit_21, 0), _fx_catch_19);
      FX_CALL(_fx_M4C_ppFM26pprint_cstmt_or_block_cboxv2R5PP__tN15C_form__cstmt_t(pp_0, vcase_6->t0, 0), _fx_catch_19);
      FX_CALL(_fx_M2PPFM5beginv1RM1t(pp_0, 0), _fx_catch_19);
      fx_str_t slit_22 = FX_MAKE_STR("while (");
      FX_CALL(_fx_M2PPFM3strv2RM1tS(pp_0, &slit_22, 0), _fx_catch_19);
      FX_CALL(_fx_M2PPFM3cutv1RM1t(pp_0, 0), _fx_catch_19);
      FX_CALL(_fx_M4C_ppFM8pp_cexp_v3R5PP__tN14C_form__cexp_ti(pp_0, vcase_6->t1, 0, 0), _fx_catch_19);
      FX_CALL(_fx_M2PPFM3cutv1RM1t(pp_0, 0), _fx_catch_19);
      fx_str_t slit_23 = FX_MAKE_STR(");");
      FX_CALL(_fx_M2PPFM3strv2RM1tS(pp_0, &slit_23, 0), _fx_catch_19);
      FX_CALL(_fx_M2PPFM3endv1RM1t(pp_0, 0), _fx_catch_19);

   _fx_catch_19: ;
   }
   else if (tag_0 == 15) {
      _fx_LT2LN14C_form__cexp_tLN15C_form__cstmt_t cases_0 = 0;
      _fx_T3N14C_form__cexp_tLT2LN14C_form__cexp_tLN15C_form__cstmt_tR10Ast__loc_t* vcase_7 = &s_0->u.CStmtSwitch;
      FX_CALL(_fx_M2PPFM5beginv1RM1t(pp_0, 0), _fx_catch_25);
      fx_str_t slit_24 = FX_MAKE_STR("switch (");
      FX_CALL(_fx_M2PPFM3strv2RM1tS(pp_0, &slit_24, 0), _fx_catch_25);
      FX_CALL(_fx_M2PPFM5beginv1RM1t(pp_0, 0), _fx_catch_25);
      FX_CALL(_fx_M4C_ppFM8pp_cexp_v3R5PP__tN14C_form__cexp_ti(pp_0, vcase_7->t0, 0, 0), _fx_catch_25);
      FX_CALL(_fx_M2PPFM3endv1RM1t(pp_0, 0), _fx_catch_25);
      fx_str_t slit_25 = FX_MAKE_STR(") {");
      FX_CALL(_fx_M2PPFM3strv2RM1tS(pp_0, &slit_25, 0), _fx_catch_25);
      FX_CALL(_fx_M2PPFM3endv1RM1t(pp_0, 0), _fx_catch_25);
      FX_CALL(_fx_M2PPFM6break0v1RM1t(pp_0, 0), _fx_catch_25);
      FX_COPY_PTR(vcase_7->t1, &cases_0);
      _fx_LT2LN14C_form__cexp_tLN15C_form__cstmt_t lst_0 = cases_0;
      for (; lst_0; lst_0 = lst_0->tl) {
         _fx_LN14C_form__cexp_t labels_0 = 0;
         _fx_LN15C_form__cstmt_t code_0 = 0;
         fx_str_t v_3 = {0};
         fx_str_t v_4 = {0};
         _fx_T2LN14C_form__cexp_tLN15C_form__cstmt_t* __pat___0 = &lst_0->hd;
         FX_COPY_PTR(__pat___0->t0, &labels_0);
         FX_COPY_PTR(__pat___0->t1, &code_0);
         FX_CALL(_fx_M2PPFM5beginv1RM1t(pp_0, 0), _fx_catch_24);
         bool isdefault_0;
         if (labels_0 == 0) {
            fx_str_t slit_26 = FX_MAKE_STR("default:");
            FX_CALL(_fx_M2PPFM3strv2RM1tS(pp_0, &slit_26, 0), _fx_catch_20);
            isdefault_0 = true;

         _fx_catch_20: ;
         }
         else {
            _fx_LN14C_form__cexp_t lst_1 = labels_0;
            for (; lst_1; lst_1 = lst_1->tl) {
               _fx_N14C_form__cexp_t l_0 = lst_1->hd;
               fx_str_t slit_27 = FX_MAKE_STR("case ");
               FX_CALL(_fx_M2PPFM3strv2RM1tS(pp_0, &slit_27, 0), _fx_catch_21);
               FX_CALL(_fx_M4C_ppFM8pp_cexp_v3R5PP__tN14C_form__cexp_ti(pp_0, l_0, 0, 0), _fx_catch_21);
               fx_str_t slit_28 = FX_MAKE_STR(":");
               FX_CALL(_fx_M2PPFM3strv2RM1tS(pp_0, &slit_28, 0), _fx_catch_21);
               FX_CALL(_fx_M2PPFM5spacev1RM1t(pp_0, 0), _fx_catch_21);

            _fx_catch_21: ;
               FX_CHECK_EXN(_fx_catch_22);
            }
            isdefault_0 = false;

         _fx_catch_22: ;
         }
         FX_CHECK_EXN(_fx_catch_24);
         FX_CALL(_fx_M2PPFM3endv1RM1t(pp_0, 0), _fx_catch_24);
         FX_CALL(_fx_M2PPFM6break0v1RM1t(pp_0, 0), _fx_catch_24);
         FX_CALL(_fx_M2PPFM6beginvv1RM1t(pp_0, 0), _fx_catch_24);
         int_ v_5;
         FX_CALL(_fx_M4C_ppFM8length1_i1LN15C_form__cstmt_t(code_0, &v_5, 0), _fx_catch_24);
         int_ t_0;
         if (isdefault_0) {
            t_0 = 0;
         }
         else {
            t_0 = 1;
         }
         int_ codelen_0 = v_5 + t_0;
         int_ i_0 = 0;
         _fx_LN15C_form__cstmt_t lst_2 = code_0;
         for (; lst_2; lst_2 = lst_2->tl, i_0 += 1) {
            _fx_N15C_form__cstmt_t s_1 = lst_2->hd;
            if (i_0 == 0) {
               fx_str_t slit_29 = FX_MAKE_STR("   "); FX_CALL(_fx_M2PPFM3strv2RM1tS(pp_0, &slit_29, 0), _fx_catch_23);
            }
            FX_CALL(_fx_M4C_ppFM9pp_cstmt_v2R5PP__tN15C_form__cstmt_t(pp_0, s_1, 0), _fx_catch_23);
            if (i_0 < codelen_0 - 1) {
               FX_CALL(_fx_M2PPFM6break0v1RM1t(pp_0, 0), _fx_catch_23);
            }

         _fx_catch_23: ;
            FX_CHECK_EXN(_fx_catch_24);
         }
         if (isdefault_0) {
            if (code_0 == 0) {
               FX_CALL(_fx_F7__mul__S2Ci((char_)32, 3, &v_3, 0), _fx_catch_24);
               fx_str_t slit_30 = FX_MAKE_STR(";");
               {
                  const fx_str_t strs_1[] = { v_3, slit_30 };
                  FX_CALL(fx_strjoin(0, 0, 0, strs_1, 2, &v_4), _fx_catch_24);
               }
               FX_CALL(_fx_M2PPFM3strv2RM1tS(pp_0, &v_4, 0), _fx_catch_24);
            }
         }
         else {
            fx_str_t slit_31 = FX_MAKE_STR("break;"); FX_CALL(_fx_M2PPFM3strv2RM1tS(pp_0, &slit_31, 0), _fx_catch_24);
         }
         FX_CALL(_fx_M2PPFM3endv1RM1t(pp_0, 0), _fx_catch_24);
         FX_CALL(_fx_M2PPFM6break0v1RM1t(pp_0, 0), _fx_catch_24);

      _fx_catch_24: ;
         FX_FREE_STR(&v_4);
         FX_FREE_STR(&v_3);
         if (code_0) {
            _fx_free_LN15C_form__cstmt_t(&code_0);
         }
         if (labels_0) {
            _fx_free_LN14C_form__cexp_t(&labels_0);
         }
         FX_CHECK_EXN(_fx_catch_25);
      }
      fx_str_t slit_32 = FX_MAKE_STR("}");
      FX_CALL(_fx_M2PPFM3strv2RM1tS(pp_0, &slit_32, 0), _fx_catch_25);

   _fx_catch_25: ;
      if (cases_0) {
         _fx_free_LT2LN14C_form__cexp_tLN15C_form__cstmt_t(&cases_0);
      }
   }
   else if (tag_0 == 16) {
      _fx_N15C_form__cinfo_t v_6 = {0};
      _fx_T4N14C_form__ctyp_tR9Ast__id_tNt6option1N14C_form__cexp_tR10Ast__loc_t* vcase_8 = &s_0->u.CDefVal;
      _fx_R10Ast__loc_t* loc_0 = &vcase_8->t3;
      _fx_Nt6option1N14C_form__cexp_t* e_opt_1 = &vcase_8->t2;
      _fx_R9Ast__id_t* n_1 = &vcase_8->t1;
      FX_CALL(_fx_M6C_formFM6cinfo_N15C_form__cinfo_t2R9Ast__id_tR10Ast__loc_t(n_1, loc_0, &v_6, 0), _fx_catch_27);
      bool is_private_0;
      if (v_6.tag == 2) {
         is_private_0 = v_6.u.CVal.cv_flags.val_flag_private;
      }
      else {
         is_private_0 = false;
      }
      FX_CHECK_EXN(_fx_catch_27);
      FX_CALL(_fx_M2PPFM5beginv1RM1t(pp_0, 0), _fx_catch_27);
      if (is_private_0) {
         fx_str_t slit_33 = FX_MAKE_STR("static");
         FX_CALL(_fx_M2PPFM3strv2RM1tS(pp_0, &slit_33, 0), _fx_catch_27);
         FX_CALL(_fx_M2PPFM5spacev1RM1t(pp_0, 0), _fx_catch_27);
      }
      _fx_Nt6option1R9Ast__id_t v_7;
      _fx_M4C_ppFM4SomeNt6option1R9Ast__id_t1R9Ast__id_t(n_1, &v_7);
      FX_CALL(
         _fx_M4C_ppFM8pp_ctyp_v4R5PP__tN14C_form__ctyp_tNt6option1R9Ast__id_tR10Ast__loc_t(pp_0, vcase_8->t0, &v_7, loc_0, 0),
         _fx_catch_27);
      if (e_opt_1->tag == 2) {
         fx_str_t slit_34 = FX_MAKE_STR(" =");
         FX_CALL(_fx_M2PPFM3strv2RM1tS(pp_0, &slit_34, 0), _fx_catch_26);
         FX_CALL(_fx_M2PPFM5spacev1RM1t(pp_0, 0), _fx_catch_26);
         FX_CALL(_fx_M4C_ppFM8pp_cexp_v3R5PP__tN14C_form__cexp_ti(pp_0, e_opt_1->u.Some, 0, 0), _fx_catch_26);

      _fx_catch_26: ;
      }
      FX_CHECK_EXN(_fx_catch_27);
      fx_str_t slit_35 = FX_MAKE_STR(";");
      FX_CALL(_fx_M2PPFM3strv2RM1tS(pp_0, &slit_35, 0), _fx_catch_27);
      FX_CALL(_fx_M2PPFM3endv1RM1t(pp_0, 0), _fx_catch_27);

   _fx_catch_27: ;
      _fx_free_N15C_form__cinfo_t(&v_6);
   }
   else if (tag_0 == 17) {
      _fx_LN15C_form__cstmt_t cf_body_0 = 0;
      _fx_R17C_form__cdeffun_t* v_8 = &s_0->u.CDefFun->data;
      _fx_R10Ast__loc_t cf_loc_0 = v_8->cf_loc;
      FX_COPY_PTR(v_8->cf_body, &cf_body_0);
      _fx_R9Ast__id_t cf_name_0 = v_8->cf_name;
      FX_CALL(_fx_M4C_ppFM14pprint_fun_hdrv5R5PP__tR9Ast__id_tBR10Ast__loc_tB(pp_0, &cf_name_0, false, &cf_loc_0, false, 0),
         _fx_catch_29);
      FX_CALL(_fx_M2PPFM6beginvv1RM1t(pp_0, 0), _fx_catch_29);
      fx_str_t slit_36 = FX_MAKE_STR("{");
      FX_CALL(_fx_M2PPFM3strv2RM1tS(pp_0, &slit_36, 0), _fx_catch_29);
      FX_CALL(_fx_M2PPFM7newlinev1RM1t(pp_0, 0), _fx_catch_29);
      int_ i_1 = 0;
      _fx_LN15C_form__cstmt_t lst_3 = cf_body_0;
      for (; lst_3; lst_3 = lst_3->tl, i_1 += 1) {
         _fx_N15C_form__cstmt_t s_2 = lst_3->hd;
         if (i_1 > 0) {
            FX_CALL(_fx_M2PPFM6break0v1RM1t(pp_0, 0), _fx_catch_28);
         }
         FX_CALL(_fx_M4C_ppFM9pp_cstmt_v2R5PP__tN15C_form__cstmt_t(pp_0, s_2, 0), _fx_catch_28);

      _fx_catch_28: ;
         FX_CHECK_EXN(_fx_catch_29);
      }
      FX_CALL(_fx_M2PPFM3endv1RM1t(pp_0, 0), _fx_catch_29);
      FX_CALL(_fx_M2PPFM6break0v1RM1t(pp_0, 0), _fx_catch_29);
      fx_str_t slit_37 = FX_MAKE_STR("}");
      FX_CALL(_fx_M2PPFM3strv2RM1tS(pp_0, &slit_37, 0), _fx_catch_29);
      FX_CALL(_fx_M2PPFM7newlinev1RM1t(pp_0, 0), _fx_catch_29);

   _fx_catch_29: ;
      if (cf_body_0) {
         _fx_free_LN15C_form__cstmt_t(&cf_body_0);
      }
   }
   else if (tag_0 == 19) {
      _fx_N15C_form__cinfo_t v_9 = {0};
      _fx_T2R9Ast__id_tR10Ast__loc_t* vcase_9 = &s_0->u.CDefForwardSym;
      _fx_R10Ast__loc_t* cf_loc_1 = &vcase_9->t1;
      _fx_R9Ast__id_t* cf_name_1 = &vcase_9->t0;
      FX_CALL(_fx_M6C_formFM6cinfo_N15C_form__cinfo_t2R9Ast__id_tR10Ast__loc_t(cf_name_1, cf_loc_1, &v_9, 0), _fx_catch_33);
      int tag_1 = v_9.tag;
      if (tag_1 == 3) {
         FX_CALL(_fx_M4C_ppFM14pprint_fun_hdrv5R5PP__tR9Ast__id_tBR10Ast__loc_tB(pp_0, cf_name_1, true, cf_loc_1, true, 0),
            _fx_catch_30);

      _fx_catch_30: ;
      }
      else if (tag_1 == 2) {
         FX_CALL(_fx_M2PPFM5beginv1RM1t(pp_0, 0), _fx_catch_31);
         fx_str_t slit_38 = FX_MAKE_STR("FX_EXTERN_C_VAL(");
         FX_CALL(_fx_M2PPFM3strv2RM1tS(pp_0, &slit_38, 0), _fx_catch_31);
         FX_CALL(_fx_M2PPFM3cutv1RM1t(pp_0, 0), _fx_catch_31);
         _fx_Nt6option1R9Ast__id_t v_10;
         _fx_M4C_ppFM4SomeNt6option1R9Ast__id_t1R9Ast__id_t(cf_name_1, &v_10);
         fx_str_t slit_39 = FX_MAKE_STR("");
         fx_str_t slit_40 = FX_MAKE_STR(")");
         FX_CALL(
            _fx_M4C_ppFM9pp_ctyp__v7R5PP__tSSN14C_form__ctyp_tNt6option1R9Ast__id_tBR10Ast__loc_t(pp_0, &slit_39, &slit_40,
               v_9.u.CVal.cv_typ, &v_10, true, cf_loc_1, 0), _fx_catch_31);
         FX_CALL(_fx_M2PPFM3endv1RM1t(pp_0, 0), _fx_catch_31);

      _fx_catch_31: ;
      }
      else {
         fx_str_t v_11 = {0};
         fx_str_t v_12 = {0};
         fx_str_t v_13 = {0};
         fx_exn_t v_14 = {0};
         FX_CALL(_fx_M6C_formFM7idc2strS2R9Ast__id_tR10Ast__loc_t(cf_name_1, cf_loc_1, &v_11, 0), _fx_catch_32);
         FX_CALL(_fx_M4C_ppFM6stringS1S(&v_11, &v_12, 0), _fx_catch_32);
         fx_str_t slit_41 = FX_MAKE_STR("the forward declaration of ");
         fx_str_t slit_42 = FX_MAKE_STR(" does not reference a function or a value");
         {
            const fx_str_t strs_2[] = { slit_41, v_12, slit_42 };
            FX_CALL(fx_strjoin(0, 0, 0, strs_2, 3, &v_13), _fx_catch_32);
         }
         FX_CALL(_fx_M3AstFM11compile_errE2RM5loc_tS(cf_loc_1, &v_13, &v_14, 0), _fx_catch_32);
         FX_THROW(&v_14, false, _fx_catch_32);

      _fx_catch_32: ;
         fx_free_exn(&v_14);
         FX_FREE_STR(&v_13);
         FX_FREE_STR(&v_12);
         FX_FREE_STR(&v_11);
      }
      FX_CHECK_EXN(_fx_catch_33);

   _fx_catch_33: ;
      _fx_free_N15C_form__cinfo_t(&v_9);
   }
   else if (tag_0 == 18) {
      _fx_N14C_form__ctyp_t ct_typ_0 = 0;
      _fx_R17C_form__cdeftyp_t* v_15 = &s_0->u.CDefTyp->data;
      _fx_R10Ast__loc_t ct_loc_0 = v_15->ct_loc;
      FX_COPY_PTR(v_15->ct_typ, &ct_typ_0);
      _fx_R9Ast__id_t ct_name_0 = v_15->ct_name;
      _fx_Nt6option1R9Ast__id_t v_16;
      _fx_M4C_ppFM4SomeNt6option1R9Ast__id_t1R9Ast__id_t(&ct_name_0, &v_16);
      fx_str_t slit_43 = FX_MAKE_STR("typedef ");
      fx_str_t slit_44 = FX_MAKE_STR(";");
      FX_CALL(
         _fx_M4C_ppFM9pp_ctyp__v7R5PP__tSSN14C_form__ctyp_tNt6option1R9Ast__id_tBR10Ast__loc_t(pp_0, &slit_43, &slit_44,
            ct_typ_0, &v_16, true, &ct_loc_0, 0), _fx_catch_34);
      FX_CALL(_fx_M2PPFM7newlinev1RM1t(pp_0, 0), _fx_catch_34);

   _fx_catch_34: ;
      if (ct_typ_0) {
         _fx_free_N14C_form__ctyp_t(&ct_typ_0);
      }
   }
   else if (tag_0 == 20) {
      _fx_T2R9Ast__id_tR10Ast__loc_t* vcase_10 = &s_0->u.CDefForwardTyp;
      FX_CALL(_fx_M2PPFM5beginv1RM1t(pp_0, 0), _fx_catch_35);
      fx_str_t slit_45 = FX_MAKE_STR("struct ");
      FX_CALL(_fx_M2PPFM3strv2RM1tS(pp_0, &slit_45, 0), _fx_catch_35);
      FX_CALL(_fx_M4C_ppFM5pp_idv3R5PP__tR9Ast__id_tR10Ast__loc_t(pp_0, &vcase_10->t0, &vcase_10->t1, 0), _fx_catch_35);
      fx_str_t slit_46 = FX_MAKE_STR(";");
      FX_CALL(_fx_M2PPFM3strv2RM1tS(pp_0, &slit_46, 0), _fx_catch_35);
      FX_CALL(_fx_M2PPFM3endv1RM1t(pp_0, 0), _fx_catch_35);
      FX_CALL(_fx_M2PPFM7newlinev1RM1t(pp_0, 0), _fx_catch_35);

   _fx_catch_35: ;
   }
   else if (tag_0 == 21) {
      _fx_LT2R9Ast__id_tNt6option1N14C_form__cexp_t cenum_members_0 = 0;
      fx_str_t cenum_cname_0 = {0};
      _fx_R18C_form__cdefenum_t* v_17 = &s_0->u.CDefEnum->data;
      _fx_R10Ast__loc_t cenum_loc_0 = v_17->cenum_loc;
      FX_COPY_PTR(v_17->cenum_members, &cenum_members_0);
      fx_copy_str(&v_17->cenum_cname, &cenum_cname_0);
      fx_str_t slit_47 = FX_MAKE_STR("typedef enum {");
      FX_CALL(_fx_M2PPFM3strv2RM1tS(pp_0, &slit_47, 0), _fx_catch_38);
      FX_CALL(_fx_M2PPFM6break0v1RM1t(pp_0, 0), _fx_catch_38);
      FX_CALL(_fx_M2PPFM6beginvv1RM1t(pp_0, 0), _fx_catch_38);
      int_ i_2 = 0;
      _fx_LT2R9Ast__id_tNt6option1N14C_form__cexp_t lst_4 = cenum_members_0;
      for (; lst_4; lst_4 = lst_4->tl, i_2 += 1) {
         _fx_Nt6option1N14C_form__cexp_t e_opt_2 = {0};
         _fx_T2R9Ast__id_tNt6option1N14C_form__cexp_t* __pat___1 = &lst_4->hd;
         _fx_R9Ast__id_t n_2 = __pat___1->t0;
         _fx_copy_Nt6option1N14C_form__cexp_t(&__pat___1->t1, &e_opt_2);
         if (i_2 == 0) {
            fx_str_t slit_48 = FX_MAKE_STR("   "); FX_CALL(_fx_M2PPFM3strv2RM1tS(pp_0, &slit_48, 0), _fx_catch_37);
         }
         else {
            fx_str_t slit_49 = FX_MAKE_STR(",");
            FX_CALL(_fx_M2PPFM3strv2RM1tS(pp_0, &slit_49, 0), _fx_catch_37);
            FX_CALL(_fx_M2PPFM5spacev1RM1t(pp_0, 0), _fx_catch_37);
         }
         FX_CALL(_fx_M4C_ppFM5pp_idv3R5PP__tR9Ast__id_tR10Ast__loc_t(pp_0, &n_2, &cenum_loc_0, 0), _fx_catch_37);
         if (e_opt_2.tag == 2) {
            fx_str_t slit_50 = FX_MAKE_STR("=");
            FX_CALL(_fx_M2PPFM3strv2RM1tS(pp_0, &slit_50, 0), _fx_catch_36);
            FX_CALL(_fx_M4C_ppFM8pp_cexp_v3R5PP__tN14C_form__cexp_ti(pp_0, e_opt_2.u.Some, 0, 0), _fx_catch_36);

         _fx_catch_36: ;
         }
         FX_CHECK_EXN(_fx_catch_37);

      _fx_catch_37: ;
         _fx_free_Nt6option1N14C_form__cexp_t(&e_opt_2);
         FX_CHECK_EXN(_fx_catch_38);
      }
      FX_CALL(_fx_M2PPFM3endv1RM1t(pp_0, 0), _fx_catch_38);
      FX_CALL(_fx_M2PPFM6break0v1RM1t(pp_0, 0), _fx_catch_38);
      fx_str_t slit_51 = FX_MAKE_STR("} ");
      FX_CALL(_fx_M2PPFM3strv2RM1tS(pp_0, &slit_51, 0), _fx_catch_38);
      FX_CALL(_fx_M2PPFM3strv2RM1tS(pp_0, &cenum_cname_0, 0), _fx_catch_38);
      fx_str_t slit_52 = FX_MAKE_STR(";");
      FX_CALL(_fx_M2PPFM3strv2RM1tS(pp_0, &slit_52, 0), _fx_catch_38);
      FX_CALL(_fx_M2PPFM7newlinev1RM1t(pp_0, 0), _fx_catch_38);

   _fx_catch_38: ;
      FX_FREE_STR(&cenum_cname_0);
      if (cenum_members_0) {
         _fx_free_LT2R9Ast__id_tNt6option1N14C_form__cexp_t(&cenum_members_0);
      }
   }
   else if (tag_0 == 22) {
      fx_str_t ci_cname_0 = {0};
      fx_str_t v_18 = {0};
      fx_str_t v_19 = {0};
      fx_str_t vtbl_cname_0 = {0};
      fx_str_t v_20 = {0};
      fx_str_t v_21 = {0};
      _fx_R23C_form__cdefinterface_t* v_22 = &s_0->u.CDefInterface->data;
      _fx_R10Ast__loc_t ci_loc_0 = v_22->ci_loc;
      _fx_R9Ast__id_t ci_vtbl_0 = v_22->ci_vtbl;
      fx_copy_str(&v_22->ci_cname, &ci_cname_0);
      FX_CALL(_fx_M2PPFM6beginvv1RM1t(pp_0, 0), _fx_catch_39);
      FX_CALL(_fx_M4C_ppFM6stringS1S(&ci_cname_0, &v_18, 0), _fx_catch_39);
      fx_str_t slit_53 = FX_MAKE_STR("typedef struct ");
      fx_str_t slit_54 = FX_MAKE_STR(" {");
      {
         const fx_str_t strs_3[] = { slit_53, v_18, slit_54 };
         FX_CALL(fx_strjoin(0, 0, 0, strs_3, 3, &v_19), _fx_catch_39);
      }
      FX_CALL(_fx_M2PPFM3strv2RM1tS(pp_0, &v_19, 0), _fx_catch_39);
      FX_CALL(_fx_M2PPFM7newlinev1RM1t(pp_0, 0), _fx_catch_39);
      FX_CALL(_fx_M6C_formFM13get_idc_cnameS2R9Ast__id_tR10Ast__loc_t(&ci_vtbl_0, &ci_loc_0, &vtbl_cname_0, 0), _fx_catch_39);
      FX_CALL(_fx_M2PPFM3strv2RM1tS(pp_0, &vtbl_cname_0, 0), _fx_catch_39);
      fx_str_t slit_55 = FX_MAKE_STR("* vtbl;");
      FX_CALL(_fx_M2PPFM3strv2RM1tS(pp_0, &slit_55, 0), _fx_catch_39);
      FX_CALL(_fx_M2PPFM7newlinev1RM1t(pp_0, 0), _fx_catch_39);
      fx_str_t slit_56 = FX_MAKE_STR("fx_object_t* obj;");
      FX_CALL(_fx_M2PPFM3strv2RM1tS(pp_0, &slit_56, 0), _fx_catch_39);
      FX_CALL(_fx_M2PPFM3endv1RM1t(pp_0, 0), _fx_catch_39);
      FX_CALL(_fx_M2PPFM7newlinev1RM1t(pp_0, 0), _fx_catch_39);
      FX_CALL(_fx_M4C_ppFM6stringS1S(&ci_cname_0, &v_20, 0), _fx_catch_39);
      fx_str_t slit_57 = FX_MAKE_STR("} ");
      fx_str_t slit_58 = FX_MAKE_STR(";");
      {
         const fx_str_t strs_4[] = { slit_57, v_20, slit_58 };
         FX_CALL(fx_strjoin(0, 0, 0, strs_4, 3, &v_21), _fx_catch_39);
      }
      FX_CALL(_fx_M2PPFM3strv2RM1tS(pp_0, &v_21, 0), _fx_catch_39);
      FX_CALL(_fx_M2PPFM7newlinev1RM1t(pp_0, 0), _fx_catch_39);

   _fx_catch_39: ;
      FX_FREE_STR(&v_21);
      FX_FREE_STR(&v_20);
      FX_FREE_STR(&vtbl_cname_0);
      FX_FREE_STR(&v_19);
      FX_FREE_STR(&v_18);
      FX_FREE_STR(&ci_cname_0);
   }
   else if (tag_0 == 23) {
      _fx_LN15C_form__cstmt_t cm_body_0 = 0;
      _fx_LR9Ast__id_t cm_args_0 = 0;
      fx_str_t cm_cname_0 = {0};
      _fx_R19C_form__cdefmacro_t* v_23 = &s_0->u.CMacroDef->data;
      _fx_R10Ast__loc_t cm_loc_0 = v_23->cm_loc;
      FX_COPY_PTR(v_23->cm_body, &cm_body_0);
      FX_COPY_PTR(v_23->cm_args, &cm_args_0);
      fx_copy_str(&v_23->cm_cname, &cm_cname_0);
      fx_str_t slit_59 = FX_MAKE_STR("#define ");
      FX_CALL(_fx_M2PPFM3strv2RM1tS(pp_0, &slit_59, 0), _fx_catch_44);
      FX_CALL(_fx_M2PPFM3strv2RM1tS(pp_0, &cm_cname_0, 0), _fx_catch_44);
      if (cm_args_0 != 0) {
         fx_str_t slit_60 = FX_MAKE_STR("(");
         FX_CALL(_fx_M2PPFM3strv2RM1tS(pp_0, &slit_60, 0), _fx_catch_41);
         int_ i_3 = 0;
         _fx_LR9Ast__id_t lst_5 = cm_args_0;
         for (; lst_5; lst_5 = lst_5->tl, i_3 += 1) {
            _fx_R9Ast__id_t* a_0 = &lst_5->hd;
            if (i_3 > 0) {
               fx_str_t slit_61 = FX_MAKE_STR(", "); FX_CALL(_fx_M2PPFM3strv2RM1tS(pp_0, &slit_61, 0), _fx_catch_40);
            }
            FX_CALL(_fx_M4C_ppFM5pp_idv3R5PP__tR9Ast__id_tR10Ast__loc_t(pp_0, a_0, &cm_loc_0, 0), _fx_catch_40);

         _fx_catch_40: ;
            FX_CHECK_EXN(_fx_catch_41);
         }
         fx_str_t slit_62 = FX_MAKE_STR(")");
         FX_CALL(_fx_M2PPFM3strv2RM1tS(pp_0, &slit_62, 0), _fx_catch_41);

      _fx_catch_41: ;
      }
      FX_CHECK_EXN(_fx_catch_44);
      if (cm_body_0 != 0) {
         _fx_LN15C_form__cstmt_t lst_6 = cm_body_0;
         for (; lst_6; lst_6 = lst_6->tl) {
            _fx_N15C_form__cstmt_t s_3 = lst_6->hd;
            FX_CALL(_fx_M2PPFM5spacev1RM1t(pp_0, 0), _fx_catch_42);
            fx_str_t slit_63 = FX_MAKE_STR("\\");
            FX_CALL(_fx_M2PPFM3strv2RM1tS(pp_0, &slit_63, 0), _fx_catch_42);
            FX_CALL(_fx_M2PPFM6break0v1RM1t(pp_0, 0), _fx_catch_42);
            fx_str_t slit_64 = FX_MAKE_STR("    ");
            FX_CALL(_fx_M2PPFM3strv2RM1tS(pp_0, &slit_64, 0), _fx_catch_42);
            FX_CALL(_fx_M4C_ppFM9pp_cstmt_v2R5PP__tN15C_form__cstmt_t(pp_0, s_3, 0), _fx_catch_42);

         _fx_catch_42: ;
            FX_CHECK_EXN(_fx_catch_43);
         }

      _fx_catch_43: ;
      }
      FX_CHECK_EXN(_fx_catch_44);

   _fx_catch_44: ;
      FX_FREE_STR(&cm_cname_0);
      FX_FREE_LIST_SIMPLE(&cm_args_0);
      if (cm_body_0) {
         _fx_free_LN15C_form__cstmt_t(&cm_body_0);
      }
   }
   else if (tag_0 == 24) {
      _fx_T2R9Ast__id_tR10Ast__loc_t* vcase_11 = &s_0->u.CMacroUndef;
      FX_CALL(_fx_M2PPFM5beginv1RM1t(pp_0, 0), _fx_catch_45);
      fx_str_t slit_65 = FX_MAKE_STR("#undef ");
      FX_CALL(_fx_M2PPFM3strv2RM1tS(pp_0, &slit_65, 0), _fx_catch_45);
      FX_CALL(_fx_M4C_ppFM5pp_idv3R5PP__tR9Ast__id_tR10Ast__loc_t(pp_0, &vcase_11->t0, &vcase_11->t1, 0), _fx_catch_45);
      FX_CALL(_fx_M2PPFM3endv1RM1t(pp_0, 0), _fx_catch_45);

   _fx_catch_45: ;
   }
   else if (tag_0 == 25) {
      _fx_LT2N14C_form__cexp_tLN15C_form__cstmt_t cs_l_0 = 0;
      _fx_T3LT2N14C_form__cexp_tLN15C_form__cstmt_tLN15C_form__cstmt_tR10Ast__loc_t* vcase_12 = &s_0->u.CMacroIf;
      _fx_LN15C_form__cstmt_t else_l_0 = vcase_12->t1;
      int_ i_4 = 0;
      FX_COPY_PTR(vcase_12->t0, &cs_l_0);
      _fx_LT2N14C_form__cexp_tLN15C_form__cstmt_t lst_7 = cs_l_0;
      for (; lst_7; lst_7 = lst_7->tl, i_4 += 1) {
         _fx_N14C_form__cexp_t c_0 = 0;
         _fx_LN15C_form__cstmt_t sl_0 = 0;
         fx_str_t v_24 = {0};
         _fx_T2N14C_form__cexp_tLN15C_form__cstmt_t* __pat___2 = &lst_7->hd;
         FX_COPY_PTR(__pat___2->t0, &c_0);
         FX_COPY_PTR(__pat___2->t1, &sl_0);
         FX_CALL(_fx_M2PPFM6break0v1RM1t(pp_0, 0), _fx_catch_47);
         FX_CALL(_fx_M2PPFM5beginv1RM1t(pp_0, 0), _fx_catch_47);
         if (i_4 == 0) {
            fx_str_t slit_66 = FX_MAKE_STR("#if "); fx_copy_str(&slit_66, &v_24);
         }
         else {
            fx_str_t slit_67 = FX_MAKE_STR("#elif "); fx_copy_str(&slit_67, &v_24);
         }
         FX_CALL(_fx_M2PPFM3strv2RM1tS(pp_0, &v_24, 0), _fx_catch_47);
         FX_CALL(_fx_M4C_ppFM8pp_cexp_v3R5PP__tN14C_form__cexp_ti(pp_0, c_0, 0, 0), _fx_catch_47);
         FX_CALL(_fx_M2PPFM3endv1RM1t(pp_0, 0), _fx_catch_47);
         FX_CALL(_fx_M2PPFM6break0v1RM1t(pp_0, 0), _fx_catch_47);
         _fx_LN15C_form__cstmt_t lst_8 = sl_0;
         for (; lst_8; lst_8 = lst_8->tl) {
            _fx_N15C_form__cstmt_t s_4 = lst_8->hd;
            FX_CALL(_fx_M4C_ppFM9pp_cstmt_v2R5PP__tN15C_form__cstmt_t(pp_0, s_4, 0), _fx_catch_46);

         _fx_catch_46: ;
            FX_CHECK_EXN(_fx_catch_47);
         }

      _fx_catch_47: ;
         FX_FREE_STR(&v_24);
         if (sl_0) {
            _fx_free_LN15C_form__cstmt_t(&sl_0);
         }
         if (c_0) {
            _fx_free_N14C_form__cexp_t(&c_0);
         }
         FX_CHECK_EXN(_fx_catch_50);
      }
      if (else_l_0 != 0) {
         _fx_LN15C_form__cstmt_t else_l_1 = 0;
         FX_CALL(_fx_M2PPFM6break0v1RM1t(pp_0, 0), _fx_catch_49);
         FX_CALL(_fx_M2PPFM5beginv1RM1t(pp_0, 0), _fx_catch_49);
         fx_str_t slit_68 = FX_MAKE_STR("#else");
         FX_CALL(_fx_M2PPFM3strv2RM1tS(pp_0, &slit_68, 0), _fx_catch_49);
         FX_CALL(_fx_M2PPFM3endv1RM1t(pp_0, 0), _fx_catch_49);
         FX_CALL(_fx_M2PPFM6break0v1RM1t(pp_0, 0), _fx_catch_49);
         FX_COPY_PTR(else_l_0, &else_l_1);
         _fx_LN15C_form__cstmt_t lst_9 = else_l_1;
         for (; lst_9; lst_9 = lst_9->tl) {
            _fx_N15C_form__cstmt_t s_5 = lst_9->hd;
            FX_CALL(_fx_M4C_ppFM9pp_cstmt_v2R5PP__tN15C_form__cstmt_t(pp_0, s_5, 0), _fx_catch_48);

         _fx_catch_48: ;
            FX_CHECK_EXN(_fx_catch_49);
         }

      _fx_catch_49: ;
         if (else_l_1) {
            _fx_free_LN15C_form__cstmt_t(&else_l_1);
         }
      }
      FX_CHECK_EXN(_fx_catch_50);
      FX_CALL(_fx_M2PPFM6break0v1RM1t(pp_0, 0), _fx_catch_50);
      FX_CALL(_fx_M2PPFM5beginv1RM1t(pp_0, 0), _fx_catch_50);
      fx_str_t slit_69 = FX_MAKE_STR("#endif");
      FX_CALL(_fx_M2PPFM3strv2RM1tS(pp_0, &slit_69, 0), _fx_catch_50);

   _fx_catch_50: ;
      if (cs_l_0) {
         _fx_free_LT2N14C_form__cexp_tLN15C_form__cstmt_t(&cs_l_0);
      }
   }
   else if (tag_0 == 26) {
      FX_CALL(_fx_M2PPFM6break0v1RM1t(pp_0, 0), _fx_catch_51);
      FX_CALL(_fx_M2PPFM5beginv1RM1t(pp_0, 0), _fx_catch_51);
      fx_str_t slit_70 = FX_MAKE_STR("#include ");
      FX_CALL(_fx_M2PPFM3strv2RM1tS(pp_0, &slit_70, 0), _fx_catch_51);
      FX_CALL(_fx_M2PPFM3strv2RM1tS(pp_0, &s_0->u.CMacroInclude.t0, 0), _fx_catch_51);
      FX_CALL(_fx_M2PPFM3endv1RM1t(pp_0, 0), _fx_catch_51);

   _fx_catch_51: ;
   }
   else if (tag_0 == 27) {
      FX_CALL(_fx_M2PPFM6break0v1RM1t(pp_0, 0), _fx_catch_52);
      FX_CALL(_fx_M2PPFM5beginv1RM1t(pp_0, 0), _fx_catch_52);
      fx_str_t slit_71 = FX_MAKE_STR("#pragma ");
      FX_CALL(_fx_M2PPFM3strv2RM1tS(pp_0, &slit_71, 0), _fx_catch_52);
      FX_CALL(_fx_M2PPFM3strv2RM1tS(pp_0, &s_0->u.CMacroPragma.t0, 0), _fx_catch_52);
      FX_CALL(_fx_M2PPFM3endv1RM1t(pp_0, 0), _fx_catch_52);

   _fx_catch_52: ;
   }
   else {
      FX_FAST_THROW(FX_EXN_NoMatchError, _fx_cleanup);
   }

_fx_cleanup: ;
   return fx_status;
}

static int _fx_M4C_ppFM16print_cascade_ifv5SN14C_form__cexp_tN15C_form__cstmt_tN15C_form__cstmt_tR5PP__t(
   fx_str_t* prefix_0,
   struct _fx_N14C_form__cexp_t_data_t* e_0,
   struct _fx_N15C_form__cstmt_t_data_t* s1_0,
   struct _fx_N15C_form__cstmt_t_data_t* s2_0,
   struct _fx_R5PP__t* pp_0,
   void* fx_fv)
{
   fx_str_t prefix_1 = {0};
   _fx_N14C_form__cexp_t e_1 = 0;
   _fx_N15C_form__cstmt_t s1_1 = 0;
   _fx_N15C_form__cstmt_t s2_1 = 0;
   int fx_status = 0;
   FX_CALL(fx_check_stack(), _fx_cleanup);
   fx_copy_str(prefix_0, &prefix_1);
   FX_COPY_PTR(e_0, &e_1);
   FX_COPY_PTR(s1_0, &s1_1);
   FX_COPY_PTR(s2_0, &s2_1);
   for (;;) {
      fx_str_t prefix_2 = {0};
      _fx_N14C_form__cexp_t e_2 = 0;
      _fx_N15C_form__cstmt_t s1_2 = 0;
      _fx_N15C_form__cstmt_t s2_2 = 0;
      fx_str_t v_0 = {0};
      fx_copy_str(&prefix_1, &prefix_2);
      FX_COPY_PTR(e_1, &e_2);
      FX_COPY_PTR(s1_1, &s1_2);
      FX_COPY_PTR(s2_1, &s2_2);
      FX_CALL(_fx_M2PPFM5beginv1RM1t(pp_0, 0), _fx_catch_3);
      fx_str_t slit_0 = FX_MAKE_STR(" (");
      {
         const fx_str_t strs_0[] = { prefix_2, slit_0 };
         FX_CALL(fx_strjoin(0, 0, 0, strs_0, 2, &v_0), _fx_catch_3);
      }
      FX_CALL(_fx_M2PPFM3strv2RM1tS(pp_0, &v_0, 0), _fx_catch_3);
      FX_CALL(_fx_M4C_ppFM8pp_cexp_v3R5PP__tN14C_form__cexp_ti(pp_0, e_2, 0, 0), _fx_catch_3);
      fx_str_t slit_1 = FX_MAKE_STR(")");
      FX_CALL(_fx_M2PPFM3strv2RM1tS(pp_0, &slit_1, 0), _fx_catch_3);
      FX_CALL(_fx_M2PPFM5spacev1RM1t(pp_0, 0), _fx_catch_3);
      FX_CALL(_fx_M4C_ppFM26pprint_cstmt_or_block_cboxv2R5PP__tN15C_form__cstmt_t(pp_0, s1_2, 0), _fx_catch_3);
      int tag_0 = FX_REC_VARIANT_TAG(s2_2);
      bool res_0;
      if (tag_0 == 1) {
         res_0 = true; goto _fx_endmatch_0;
      }
      if (tag_0 == 7) {
         if (s2_2->u.CStmtBlock.t0 == 0) {
            res_0 = true; goto _fx_endmatch_0;
         }
      }
      res_0 = false;

   _fx_endmatch_0: ;
      FX_CHECK_EXN(_fx_catch_3);
      if (res_0) {
         FX_BREAK(_fx_catch_0);  _fx_catch_0: ; goto _fx_endmatch_1;
      }
      if (tag_0 == 9) {
         _fx_T4N14C_form__cexp_tN15C_form__cstmt_tN15C_form__cstmt_tR10Ast__loc_t* vcase_0 = &s2_2->u.CStmtIf;
         FX_CALL(_fx_M2PPFM5spacev1RM1t(pp_0, 0), _fx_catch_1);
         fx_str_t slit_2 = FX_MAKE_STR("else if");
         FX_FREE_STR(&prefix_1);
         fx_copy_str(&slit_2, &prefix_1);
         _fx_N14C_form__cexp_t* e__0 = &vcase_0->t0;
         _fx_free_N14C_form__cexp_t(&e_1);
         FX_COPY_PTR(*e__0, &e_1);
         _fx_N15C_form__cstmt_t* s1__0 = &vcase_0->t1;
         _fx_free_N15C_form__cstmt_t(&s1_1);
         FX_COPY_PTR(*s1__0, &s1_1);
         _fx_N15C_form__cstmt_t* s2__0 = &vcase_0->t2;
         _fx_free_N15C_form__cstmt_t(&s2_1);
         FX_COPY_PTR(*s2__0, &s2_1);

      _fx_catch_1: ;
         goto _fx_endmatch_1;
      }
      FX_CALL(_fx_M2PPFM5spacev1RM1t(pp_0, 0), _fx_catch_2);
      FX_CALL(_fx_M2PPFM5beginv1RM1t(pp_0, 0), _fx_catch_2);
      fx_str_t slit_3 = FX_MAKE_STR("else");
      FX_CALL(_fx_M2PPFM3strv2RM1tS(pp_0, &slit_3, 0), _fx_catch_2);
      FX_CALL(_fx_M2PPFM5spacev1RM1t(pp_0, 0), _fx_catch_2);
      FX_CALL(_fx_M4C_ppFM26pprint_cstmt_or_block_cboxv2R5PP__tN15C_form__cstmt_t(pp_0, s2_2, 0), _fx_catch_2);
      FX_BREAK(_fx_catch_2);

   _fx_catch_2: ;

   _fx_endmatch_1: ;
      FX_CHECK_EXN(_fx_catch_3);

   _fx_catch_3: ;
      FX_FREE_STR(&v_0);
      if (s2_2) {
         _fx_free_N15C_form__cstmt_t(&s2_2);
      }
      if (s1_2) {
         _fx_free_N15C_form__cstmt_t(&s1_2);
      }
      if (e_2) {
         _fx_free_N14C_form__cexp_t(&e_2);
      }
      FX_FREE_STR(&prefix_2);
      FX_CHECK_BREAK();
      FX_CHECK_EXN(_fx_cleanup);
   }

_fx_cleanup: ;
   FX_FREE_STR(&prefix_1);
   if (e_1) {
      _fx_free_N14C_form__cexp_t(&e_1);
   }
   if (s1_1) {
      _fx_free_N15C_form__cstmt_t(&s1_1);
   }
   if (s2_1) {
      _fx_free_N15C_form__cstmt_t(&s2_1);
   }
   return fx_status;
}

FX_EXTERN_C int _fx_M4C_ppFM20pprint_top_to_stringS1LN15C_form__cstmt_t(
   struct _fx_LN15C_form__cstmt_t_data_t* code_0,
   fx_str_t* fx_result,
   void* fx_fv)
{
   _fx_R5PP__t pp_0 = {0};
   _fx_LS all_lines_0 = 0;
   int fx_status = 0;
   FX_CALL(_fx_M2PPFM21pprint_to_string_listRM1t2ii(128, 3, &pp_0, 0), _fx_cleanup);
   FX_CALL(_fx_M2PPFM6beginvv2RM1ti(&pp_0, 0, 0), _fx_cleanup);
   int_ i_0 = 0;
   _fx_LN15C_form__cstmt_t lst_0 = code_0;
   for (; lst_0; lst_0 = lst_0->tl, i_0 += 1) {
      _fx_N15C_form__cstmt_t s_0 = lst_0->hd;
      if (i_0 != 0) {
         FX_CALL(_fx_M2PPFM6break0v1RM1t(&pp_0, 0), _fx_catch_0);
      }
      FX_CALL(_fx_M4C_ppFM9pp_cstmt_v2R5PP__tN15C_form__cstmt_t(&pp_0, s_0, 0), _fx_catch_0);

   _fx_catch_0: ;
      FX_CHECK_EXN(_fx_cleanup);
   }
   FX_CALL(_fx_M2PPFM7newlinev1RM1t(&pp_0, 0), _fx_cleanup);
   FX_CALL(_fx_M2PPFM3endv1RM1t(&pp_0, 0), _fx_cleanup);
   FX_CALL(_fx_M2PPFM5flushv1RM1t(&pp_0, 0), _fx_cleanup);
   _fx_FPLS0* f_0 = &pp_0.get_f;
   FX_CALL(f_0->fp(&all_lines_0, f_0->fcv), _fx_cleanup);
   fx_str_t slit_0 = FX_MAKE_STR("");
   fx_str_t slit_1 = FX_MAKE_STR("\n");
   fx_str_t slit_2 = FX_MAKE_STR("\n");
   FX_CALL(_fx_F12join_embraceS4SSSLS(&slit_0, &slit_1, &slit_2, all_lines_0, fx_result, 0), _fx_cleanup);

_fx_cleanup: ;
   _fx_free_R5PP__t(&pp_0);
   if (all_lines_0) {
      _fx_free_LS(&all_lines_0);
   }
   return fx_status;
}

FX_EXTERN_C int fx_init_C_pp(void)
{
   int fx_status = 0;
   return fx_status;
}

FX_EXTERN_C void fx_deinit_C_pp(void)
{

}

